異なるインターフェイス(SO_BINDTODEVICE)を介して同じサーバーに接続する:ターゲットホストに接続できません。

異なるインターフェイス(SO_BINDTODEVICE)を介して同じサーバーに接続する:ターゲットホストに接続できません。

2つのインターフェースがあります。eth0wlan0インターフェイスは異なるルータに接続されています。対応するネットワーク仕様は次のとおりです。

eth0:
    ip: 192.168.1.7
    Gateway: 192.168.1.1
    Submask: 255.255.255.0

wlan0:
    ip: 192.168.2.21
    Gateway: 192.168.2.1
    Submask: 255.255.255.0

次のようにルーティングを設定します。

ip route add table eth0 to 192.168.1.0/24 dev eth0 scope link
ip route add table eth0 default via 192.168.1.1 dev eth0
ip rule add from 192.168.1.7 table eth0

その値を使用するwlan0の場合も同様です。したがって、パス出力は次のようになります。

ip rule
    0:      from all lookup local
    32764:  from 192.168.2.21 lookup wlan0
    32765:  from 192.168.1.7 lookup eth0
    32766:  from all lookup main
    32767:  from all lookup default

ip r s
    default via 192.168.1.1 dev eth0  proto static
    192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.7  metric 1
    192.168.2.0/24 dev wlan0  proto kernel  scope link  src 192.168.2.21  metric 9

ip r s table eth0
    default via 192.168.1.1 dev eth0
    192.168.1.0/24 dev eth0  scope link

ip r s table wlan0
    default via 192.168.2.1 dev wlan0
    192.168.2.0/24 dev wlan0  scope link

そしてまた変更されsysctl "net.ipv4.conf.all.rp_filter=0"ましたsysctl -w "net.ipv4.ip_forward=1"。 (実際にはこれが必要だとは思わないが、ip_forward万が一の場合に備えて変更しました。)

しかし、奇妙なことは、強制インターフェースをGoogleにpingすると、他のインターフェースは正常に機能するというメッセージがwlan0表示されることです。Destination Host Unreachable

ping -I wlan0 google.es
    PING google.es (173.194.45.183) from 192.168.2.21 wlan0: 56(84) bytes of data.
    From 192.168.2.21 icmp_seq=1 Destination Host Unreachable
    From 192.168.2.21 icmp_seq=2 Destination Host Unreachable
    From 192.168.2.21 icmp_seq=3 Destination Host Unreachable
    From 192.168.2.21 icmp_seq=4 Destination Host Unreachable

ping -I eth0 google.es
    PING google.es (173.194.45.191) from 192.168.1.7 eth0: 56(84) bytes of data.
    64 bytes from mad06s09-in-f31.1e100.net (173.194.45.191): icmp_seq=1 ttl=56 time=21.5 ms
    64 bytes from mad06s09-in-f31.1e100.net (173.194.45.191): icmp_seq=2 ttl=55 time=21.7 ms
    64 bytes from mad06s09-in-f31.1e100.net (173.194.45.191): icmp_seq=3 ttl=56 time=24.6 ms
    64 bytes from mad06s09-in-f31.1e100.net (173.194.45.191): icmp_seq=4 ttl=55 time=31.1 ms

ベストアンサー1

この強制インターフェイスバインディングの場合、ソースアドレスをどのように決定するのかわかりません。デバイスからソースアドレスを取得しない場合、問題はセレクタがip rule一致しないため、パケットがmainルーティングテーブルに移動することです。

default via 192.168.1.1 dev eth0  proto static

これは機能しませんwlan0

私はこれを試すことをお勧めします:

ip rule add from 192.168.1.7  table  eth0
ip rule add oif  eth0         table  eth0
ip rule add from 192.168.2.21 table wlan0
ip rule add oif  wlan0        table wlan0

延長

ip route add table eth0
ip route add table wlan0

srcオプションコマンドを介して 。

おすすめ記事