아웃 바운드 연결에 여러 개의 기본 게이트웨이를 사용할 수 있습니까?


15

동일한 서브넷에 여러 개의 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기본적으로 wlan0if eth0는 작동 하지 않는 경우 기본 게이트웨이로 이동하는 것 입니다.

가능합니까? 그러한 기능을 달성하려면 어떻게해야합니까?


아주 간단히 말하면 : 여러 기본 경로가 하나의 인터페이스를 임의로 선택하므로 할당 된 IP가 다르기 때문에 문제가 발생합니다. 당신이되고 싶은 멀티 홈 또는 번들링 할 어려운되는, 예를 참조 여기에
dirkt

1
본딩과 함께 동적 페일 오버를 사용할 수 있습니다 . 기본 경로로 바이올린을 칠 필요가 없습니다.
Ingo

답변:


17

직접 해결했습니다. 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다른 터미널에 입력 할 수 있습니다 . pingifdown 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 주소를 사용할 수 있습니다.


시간이 오래 걸리는 연결 (예 : 큰 파일 scp)을 사용하고, 사용하는 네트워크 인터페이스를 확인하고, 해당 인터페이스를 비활성화하고 어떤 일이 발생하는지 확인하십시오.
dirkt

scpIP 주소가 변경되기 때문에 세션이 끊어집니다. withsctp이러한 경우 연결을 유지하기 위해 사용 을 시도 하거나 중지 된 지점에서 전송 을 계속하는 rsync대신 사용할 수 있습니다 scp.
rosix 2019

요점은 다음과 같습니다. 중단 된 경우 현재 가장 빠른 네트워크 인터페이스에서 단일 기본 경로를 갖는 것보다 복잡한 설정의 장점은 무엇입니까? withsctp하나의 기본 경로에서만 작동합니다.
dirkt

1
"현재 가장 빠른 네트워크 인터페이스와 같이 하나의 기본 경로 만 갖는 것보다 복잡한 설정의 장점은 무엇입니까?" >> 이것이 제 설정이하는 일입니다. 기본적으로 가장 빠른 기본 경로 (eth0) 만 사용됩니다. 천만에요.
rosix 2019

11

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_reselect옵션을 better(가장 빠른 링크 자동 선택)으로 설정하면 여기에 도움이됩니다.

자세한 내용은 https://wiki.linuxfoundation.org/networking/bondinghttps://wiki.debian.org/Bonding을 참조하십시오.

그리고 물론 ( https://www.kernel.org/doc/Documentation/networking/bonding.txt ) 리눅스 커널 문서

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.