다른 인터페이스(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에 강제 인터페이스를 핑할 때 ...다른 인터페이스는 정상적으로 작동한다는 메시지 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옵션 명령을 통해 .

관련 정보