직접 해결했습니다. Linux로 할 수있는 네트워킹 관련 정보는 거의없는 것 같습니다. 따라서 솔루션을 자세히 문서화하고 설명하기로 결정했습니다. 이것이 내 최종 설정입니다.
- NIC 3 개 : eth0 (와이어), wlan0 (내장 Wi-Fi, 약함), wlan1 (usb wifi 어댑터, wlan0보다 강한 신호)
- 모두 단일 서브넷에 있으며 각각 고유 한 IP 주소를 갖습니다.
- eth0은 기본적으로 들어오고 나가는 트래픽 모두에 사용해야합니다.
- eth0이 실패하면 wlan1을 사용해야합니다.
- wlan1이 실패하면 wlan0을 사용해야합니다.
첫 번째 단계 :의 모든 인터페이스에 대해 새 라우팅 테이블을 만듭니다 /etc/iproute2/rt_tables. rt1, rt2 및 rt3이라고합시다
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt1
2 rt2
3 rt3
두 번째 단계 :의 네트워크 구성 /etc/network/interfaces. 이것이 주요 부분이며 가능한 한 많이 설명하려고 노력할 것입니다.
auto eth0 wlan0
allow-hotplug wlan1
iface lo inet loopback
iface eth0 inet static
address 192.168.178.99
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.99 table rt1
post-up ip route add default via 192.168.178.1 dev eth0 table rt1
post-up ip rule add from 192.168.178.99/32 table rt1
post-up ip rule add to 192.168.178.99/32 table rt1
post-up ip route add default via 192.168.178.1 metric 100 dev eth0
post-down ip rule del from 0/0 to 0/0 table rt1
post-down ip rule del from 0/0 to 0/0 table rt1
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.97
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.97 table rt2
post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
post-up ip rule add from 192.168.178.97/32 table rt2
post-up ip rule add to 192.168.178.97/32 table rt2
post-up ip route add default via 192.168.178.1 metric 102 dev wlan0
post-down ip rule del from 0/0 to 0/0 table rt2
post-down ip rule del from 0/0 to 0/0 table rt2
iface wlan1 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.98
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev wlan1 src 192.168.178.98 table rt3
post-up ip route add default via 192.168.178.1 dev wlan1 table rt3
post-up ip rule add from 192.168.178.98/32 table rt3
post-up ip rule add to 192.168.178.98/32 table rt3
post-up ip route add default via 192.168.178.1 metric 101 dev wlan1
post-down ip rule del from 0/0 to 0/0 table rt3
post-down ip rule del from 0/0 to 0/0 table rt3
입력 ip rule show하면 다음이 표시됩니다.
0: from all lookup local
32756: from all to 192.168.178.98 lookup rt3
32757: from 192.168.178.98 lookup rt3
32758: from all to 192.168.178.99 lookup rt1
32759: from 192.168.178.99 lookup rt1
32762: from all to 192.168.178.97 lookup rt2
32763: from 192.168.178.97 lookup rt2
32766: from all lookup main
32767: from all lookup default
이는 IP 주소 "192.168.178.99"에서 들어 오거나 나가는 트래픽이 rt1 라우팅 테이블을 사용한다는 것을 나타냅니다. 여태까지는 그런대로 잘됐다. 그러나 로컬에서 생성 된 트래픽 (예 : 컴퓨터에서 다른 곳으로 핑 또는 ssh하려는 경우)에는 특별한 처리가 필요합니다 (질문의 큰 따옴표 참조).
처음 네 개의 포스트 업 라인 /etc/network/interfaces은 간단하고 인터넷에서 설명을 찾을 수 있으며 다섯 번째 및 마지막 포스트 업 라인은 마술을 일으키는 것입니다.
post-up ip r add default via 192.168.178.1 metric 100 dev eth0
이 포스트 라인에 대한 라우팅 테이블을 지정하지 않은 방법에 유의하십시오. 라우팅 테이블을 지정하지 않으면 정보는에서 본 main라우팅 테이블에 저장 됩니다 ip rule show. 이 게시 라인은 들어오는 트래픽에 대한 응답이 아닌 로컬로 생성 된 트래픽에 사용되는 기본 경로를 "주"라우팅 테이블에 넣습니다. (예를 들어 전자 메일을 보내려는 서버의 MTA)
세 가지 인터페이스는 모두 다른 측정 항목이 있지만 기본 경로 테이블에 기본 경로를 배치합니다. 다음 main과 같이 경로 테이블을 살펴 보겠습니다 ip route show.
default via 192.168.178.1 dev eth0 metric 100
default via 192.168.178.1 dev wlan1 metric 101
default via 192.168.178.1 dev wlan0 metric 102
192.168.178.0/24 dev wlan0 proto kernel scope link src 192.168.178.97
192.168.178.0/24 dev eth0 proto kernel scope link src 192.168.178.99
192.168.178.0/24 dev wlan1 proto kernel scope link src 192.168.178.98
기본 경로 테이블에는 메트릭이 다르지만 기본 경로가 3 개 있음을 알 수 있습니다. 메트릭 번호가 낮을수록 우선 순위가 높기 때문에 우선 순위가 가장 높은 eth0, wlan1 및 wlan0입니다. eth0메트릭이 가장 낮기 때문에 이것이 기본적으로 사용되는 기본 경로입니다 eth0. 경우 eth0다운되면, 나가는 트래픽으로 전환됩니다 wlan1.
이 설정 ping 8.8.8.8으로 한 터미널과 ifdown eth0다른 터미널에 입력 할 수 있습니다 . ping에 ifdown eth0관련된 기본 경로를 제거 하기 때문에 eth0발신 트래픽이로 전환 되므로 여전히 작동 합니다 wlan1.
포스트 다운 라인은 ip rule show모든 것이 깔끔하게 유지되도록 인터페이스가 다운 될 때 관련 라우팅 테이블이 라우팅 정책 데이터베이스 ( ) 에서 삭제되도록합니다 .
남아있는 문제 eth0는 기본 경로 에서 플러그를 eth0뽑아도 여전히 있고 나가는 트래픽이 실패한다는 것입니다. 인터페이스 ifdown eth0에 문제가 있거나 (예 : NIC 오류 또는 플러그를 뽑는 사람) 인터페이스를 모니터링하고 실행할 무언가가 필요합니다 .
마지막 단계 :을 입력하십시오 ifplugd. ifup/ifdown플러그를 뽑거나 wifi 연결에 문제가있는 경우 인터페이스를보고 실행하는 데몬입니다 /etc/default/ifplugd.
INTERFACES="eth0 wlan0 wlan1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"
이제 플러그를 뽑으면 eth0나가는 트래픽이로 전환되고 wlan1플러그를 다시 넣으면 나가는 트래픽이로 바뀝니다 eth0. 세 가지 인터페이스 중 하나라도 작동하면 서버는 온라인 상태를 유지합니다. 서버에 연결하기 위해 eth0의 IP 주소를 사용할 수 있으며, 실패하면 wlan1 또는 wlan0의 IP 주소를 사용할 수 있습니다.