私は、以下を含む一連のインターフェースを備えたマルチホームUbuntuサーバーを持っています。
eth2: 10.10.0.131/24
eth3: 10.20.0.2/24
デフォルトのインターフェースはeth2で、ゲートウェイは10.10.0.1です。ルーティングテーブルは次のようになります。
root@c220-1:~# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.10.0.1 0.0.0.0 UG 0 0 0 eth2
10.10.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
10.20.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth3
10.30.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.40.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
別のネットワークから(192.168.3.5/24
)eth2インターフェイス(デフォルトゲートウェイを備えたインターフェイス)でこのマシンに到達できますが、eth3インターフェイスでは到達できません。問題なく同じネットワーク(10.20.0.1)上のルーターからeth3インターフェイスにpingを実行できます。
192.168.3.5から10.10.0.131にpingすると、パケットはマシンに到達しますが、応答は送信されません。
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 0, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 1, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 2, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 3, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 4, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 5, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 6, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 7, length 64
同じネットワーク上のルーター(10.20.0.1)からpingを実行すると、サーバーは正しく応答します。
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
この 同様の質問 の回答に従って、すべてのインターフェイスでrp_filterをオフにしていますが、問題は解決しません。
$ for i in eth0 eth1 eth2 eth3 all default
> do
> cat /proc/sys/net/ipv4/conf/$i/rp_filter
> done
0
0
0
0
0
0
問題は、デフォルトルートがeth2を経由するため、要求がeth3で受信された場合でも、ping応答がeth2を経由して送信されることです。 (tcpdump eth2を実行すると、送信された応答が表示されるはずです。)おそらく、ネットワーク上に無効なソースIPがあるため、パケットをドロップしているデバイスが存在する可能性があります。受信したインターフェースから送信される応答を取得するには、いくつかの ソースポリシールーティング が必要です。
新しいルーティングテーブルを作成します(一度だけ実行する必要があります):
echo 13 eth3 >> /etc/iproute2/rt_tables
Eth3から出るこの新しいテーブルにデフォルトルートを追加します。
ip route add default via 10.20.0.1 table eth3
Eth3のIPのソースアドレスを持つパケットにこの新しいテーブルを使用するポリシールールを追加します。
ip rule add from 10.20.0.2 lookup eth3
別のネットワーク(192.168.3.5/24)からは、eth2インターフェイス(デフォルトゲートウェイを持つインターフェイス)でこのマシンに到達できますが、eth3インターフェイスでは到達できません。問題なく同じネットワーク(10.20.0.1)上のルーターからeth3インターフェイスにpingを実行できます。
10.30.0/24サブネットから192.168.3.5/24へのルートが欠落しているようです。各デバイスから各ネットワークのネットワーク図とtracerouteを追加する必要があります。