堀田@諫早市です。 # マルチフォロー&引用順序を変えています。 結果的に、生半可な iptables の設定が悪さをしていたようです。 On Mon, 20 May 2002 22:45:07 +0900 (JST) Subject [vine-users:050690] Re: source-IP に反対側の i/f のものがつく Hisashi DATE <date@xxxxxxxxxxxxxxxxxxxx> wrote: > 伊達@東工大です. フォローありがとうございます。あ、個人宛の返信は不要です。 > > なお、gw1, gw2 とも ipchains/iptables 等は設定していません。 > > とのことですが,念のために ipchains/iptables のルールも知りたいです. ご指摘の通り、これが原因のようです。 > # 空になっているはずなんですよね? カラに見えるのですが、どうも違うようです? まず gw1 ですが、IP Masq しています。これはデフォルトルートを こちらに向けない限り、関係ないと思います。 root@ns ~# ipchains -L -n Chain input (policy ACCEPT): Chain forward (policy ACCEPT): target prot opt source destination ports MASQ all ------ 192.168.0.218 0.0.0.0/0 n/a Chain output (policy ACCEPT): 次に gw2 ですが、iptables の勉強中でして、まず以下のスクリプトを 作って流しました。 root@ns2 ~# cat iptables.sh #!/bin/bash iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -A INPUT -s 127.0.0.1 -p all -j ACCEPT iptables -A INPUT -s 192.168.0.0/16 -p all -i eth1 -j ACCEPT # ARP iptables -A INPUT -s 10.252.0.128/28 -p ip -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p icmp -j ACCEPT # フラグメント化されたパケットの2番目以降は通す iptables -A INPUT -s 0.0.0.0/0 -p udp --fragment -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p tcp --fragment -j ACCEPT # Common service iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport ssh -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport smtp -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport domain -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport http -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport https -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p tcp -j REJECT iptables -A INPUT -s 0.0.0.0/0 -p udp -j REJECT # IP Masquerade iptables -A POSTROUTING -t nat -s 192.168.0.0/16 -j SNAT \ --to-source 10.252.0.132 たぶん、最後のルールが直接の原因だと思われます。IPマスカレードを やるつもりで入れたのですが、destination を指定していないのが敗因? で不思議なのが、そのあと root@ns2 ~# cat ipclear.sh #!/bin/bash iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT というスクリプトを流して root@ns2 ~# ./ipclear.sh root@ns2 ~# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination root@ns2 ~# ipchains -L -n ipchains: Incompatible with this kernel という状態になっているので、iptables 関連の設定はすべて解除され ているものと思っていました。ところが、この状態でも IP Masq が有 効になっています。 大里さん(テストしていただいたようで、お手数をおかけしました) からご指摘いただいた、 On Mon, 20 May 2002 20:40:25 +0900 Subject [vine-users:050689] Re: source-IP に反対側の i/f のものがつく "OOSATO,Kazzrou" <kazz@xxxxxxxxxxxxxx> wrote: > この時の、ns2 上での tcpdump -i eth1 -n icmp の結果を見たい > 気がしますが。 root@ns2 ~# tcpdump -i eth1 -n icmp tcpdump: listening on eth1 12:01:15.960904 10.252.0.132 > 192.168.0.218: icmp: echo request (DF) 12:01:15.961862 192.168.0.218 > 10.252.0.132: icmp: echo reply 12:01:16.955245 10.252.0.132 > 192.168.0.218: icmp: echo request (DF) 12:01:16.956025 192.168.0.218 > 10.252.0.132: icmp: echo reply これは -t nat のなせるわざでしょうか。 > あと、arp キャッシュはどうなっているのでしょう。 root@ns2 ~# arp -an ? (192.168.0.254) at 00:02:B3:08:7F:98 [ether] on eth1 ? (192.168.0.218) at 00:10:A4:15:3E:5E [ether] on eth1 > 次のことが気になります. > > ・ Client から ping 10.252.0.132 しても返ってくるか はい > ・ ns2 で ping -I eth1 192.168.0.218 とやっても tcpdump 結果は同じか はい > ・ ns2 で echo 0 > /proc/sys/net/ipv4/ip_forward してからやりなおすと > ソースは eth1 のものになるか. はい。 たださすがに、192.168.0.218 から 192.168.0.253(gw2 の内側) に ping すると、echo reply 時の source-IP は 192.168.0.253 になる ようです。 また、クライアント側からの IP Masq も通らなくなります。 で、別の質問になってしまうのですが、 1.nat の設定は iptables -L -n では表示されないのでしょうか。 2.nat の設定を(リブートなしで)解除するにはどうすればよいでしょうか。 -- 堀田 倫英 <hotta@xxxxxxxxxxxxxx> <http://www.net-newbie.com>