동일한 서브넷에 여러 개의 NIC (eth0 및 wlan0)가 있고 NIC 중 하나에 장애가 발생하면 호스트의 응용 프로그램에 대한 백업으로 사용하고 싶습니다. 이러한 이유로 추가 라우팅 테이블을 만들었습니다. 이것은 /etc/network/interfaces
다음과 같습니다
iface eth0 inet static
address 192.168.178.2
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.2
post-up ip route add default via 192.168.178.1 dev eth0
post-up ip rule add from 192.168.178.2/32
post-up ip rule add to 192.168.178.2/32
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.3
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.3 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.3/32 table rt2
post-up ip rule add to 192.168.178.3/32 table rt2
호스트에 연결하는 데 효과적입니다. 인터페이스 중 하나가 실패해도 여전히 SSH에 연결할 수 있습니다. 그러나 다운 된 호스트의 응용 프로그램은 외부 세계에 대한 연결을 초기화 할 수 없습니다 eth0
. 그게 내 문제 야
나는 그 주제를 연구했고 다음과 같은 흥미로운 정보를 발견했다.
프로그램이 아웃 바운드 연결을 시작하면 와일드 카드 소스 주소 (0.0.0.0)를 사용하는 것이 일반적이며, 관련 대상 주소에 도달 할 수있는 인터페이스를 선호하지 않습니다. 라우팅 결정이 내려 질 때까지 특정 소스 주소로 대체되지 않습니다. 따라서 이러한 연결과 관련된 트래픽은 위의 정책 규칙 중 하나와 일치하지 않으며 새로 추가 된 라우팅 테이블 중 하나로 연결되지 않습니다. 그렇지 않으면 일반 구성을 가정하면 기본 라우팅 테이블로 넘어갑니다.
http://www.microhowto.info/howto/ensure_symmetric_routing_on_a_server_with_multiple_default_gateways.html
내가 원하는 것은 기본 라우팅 테이블에 둘 이상의 기본 게이트웨이 (하나는 on eth0
및 하나 wlan0
)가 있고 eth0
기본적으로 wlan0
if eth0
는 작동 하지 않는 경우 기본 게이트웨이로 이동하는 것 입니다.
가능합니까? 그러한 기능을 달성하려면 어떻게해야합니까?
답변
직접 해결했습니다. 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 주소를 사용할 수 있습니다.
답변
Linux는 스크립팅 된 해결 방법 (활성 백업 본딩)보다 더 나은 솔루션을 제공합니다.
이 방법으로 컴퓨터에는 하나의 IP 주소 (및 하나의 mac 주소) 만 있고 하나의 인터페이스를 사용할 수없는 경우 인터페이스를 자동으로 투명하게 전환합니다. TCP 연결이 중단되지 않습니다 (내부 LAN이나 인터넷 모두).
도킹 스테이션에서 랩톱을 분리하면이 설정을 사용하여 데비안 랩톱에서 eth0에서 wlan0으로 자동 장애 조치합니다.
내 / etc / network / 인터페이스 :
# The primary network interface
allow-hotplug eth0
iface eth0 inet manual
bond-master bond0
bond-primary eth0
# The secondary network interface
allow-hotplug wlan0
iface wlan0 inet manual
pre-up sleep 5
wpa-conf /etc/wpa_supplicant.conf
bond-master bond0
bond-primary eth0
# The bonding interface
allow-hotplug bond0
iface bond0 inet dhcp
bond-slaves eth0 wlan0
bond-primary eth0
bond-mode active-backup
bond-miimon 10
bond_downdelay 10
bond_updelay 4000
여러 WLAN 장치를 포함하도록이 설정을 쉽게 확장 할 수 있습니다.
옵션을
primary_reselectbetter
(가장 빠른 링크 자동 선택)으로 설정하면 여기에 도움이됩니다.
자세한 내용은 https://wiki.linuxfoundation.org/networking/bonding 및 https://wiki.debian.org/Bonding을 참조하십시오.
그리고 물론 ( https://www.kernel.org/doc/Documentation/networking/bonding.txt ) 리눅스 커널 문서