직접 해결했습니다. 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 주소를 사용할 수 있습니다.