実現したいこと
- 内部のサーバー同士をprivateな通信にさせたいです
- globalなnetworkの帯域を消費させたくないと思っています
わからないこと
クラスターを組んでいるサーバー同士で、global ip addressを使ってWANで通信するところを、LANのinterfaceの経路に変更したのですが、一部WANのinterfaceを使う通信が起きるのはなぜでしょうか。
iptablesではLANに向かわせたいpacketを完全に捕捉できていると思うのですが、なぜかWANになってしまいます。
起きている問題
eth0がglobal networkのinterfaceです。
root@host ~]# tcpdump -ieth0 dst host 150.22.10.3 -n tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 15:38:28.418688 IP 150.22.13.3.sun-sr-https > 150.22.10.3.48112: Flags [.], ack 4010106138, win 270, options [nop,nop,TS val 1732446 ecr 44156350], length 0
150.22.13.3と150.22.10.3が内部のhostです。これをWAN用のeth0を使うことなく、eth1以降のLAN用のinterfaceを使って通信をしたいです。
設定した内容
ipsetでhostのaddressを登録し、iptablesでOUTPUT CHAINとFORWARD CHAINで宛先がipsetに合致するものをMARKしました。
policy based routingでMARKされたpacketをLANのinterfaceに流すといった具合に行いました。
ipset
[root@host ~]# ipset list internal-hosts Name: internal-hosts Type: hash:net Revision: 6 Header: family inet hashsize 1024 maxelem 1048576 Size in memory: 1272 References: 2 Number of entries: 14 Members: 150.22.10.3 150.22.12.4 ...
iptables
[root@host ~]# iptables -t mangle -nvL | grep MARK -B2 -A2 Chain FORWARD (policy ACCEPT 11083 packets, 3982K bytes) pkts bytes target prot opt in out source destination 434K 154M MARK all -- * * 0.0.0.0/0 0.0.0.0/0 match-set internal-hosts dst MARK set 0x100000 0 0 ACCEPT all -- * * 0.0.0.0/0 150.22.10.3 mark match ! 0x100000/0x100000 1200 251K ACCEPT all -- * * 0.0.0.0/0 150.22.10.3 mark match 0x100000/0x100000 -- Chain OUTPUT (policy ACCEPT 104 packets, 11776 bytes) pkts bytes target prot opt in out source destination 102 4576 MARK all -- * * 0.0.0.0/0 0.0.0.0/0 match-set internal-hosts dst MARK set 0x100000 0 0 ACCEPT all -- * * 0.0.0.0/0 150.22.10.3 mark match ! 0x100000/0x100000 0 0 ACCEPT all -- * * 0.0.0.0/0 150.22.10.3 mark match 0x100000/0x100000 [root@host ~]# iptables -t filter -L | grep MARK -B2 [root@host ~]# iptables -t nat -L | grep MARK -B2 [root@host ~]# iptables -t raw -L | grep MARK -B2 [root@host ~]
ip rule
[root@host ~]# ip rule show 0: from all lookup local 100: from all fwmark 0x100000/0x100000 lookup ecmp 32766: from all lookup main 32767: from all lookup default
ip route
eth1-eth5がprivateなinterfaceです。
[root@host ~]# ip r show table ecmp 150.22.0.0/16 src 150.22.13.3 nexthop dev eth1 weight 1 nexthop dev eth2 weight 1 nexthop dev eth3 weight 1 nexthop dev eth4 weight 1 nexthop dev eth5 weight 1
150.22.0.0/16はお借りしているvpsサーバーのもつaddressです。
srcで指定している150.22.13.3は、iptablesやrouteが設定されている対象のhostです。
追記1
コメントを受けまして、
以下のようにeth1(LAN)にrouteを追加するとeth0(WAN)へのpacketはなくなりました。
[root@host ~]# ip route add 150.22.10.3/32 dev eth1
回答1件
あなたの回答
tips
プレビュー