요약:
기존 네트워크 설정에 보조 ISP를 추가 할 때 (라우팅 추정) 문제가 있습니다. 들어오는 트래픽 Router1
은 응답하지 않지만 로컬 트래픽 및 들어오는 Router0
것은 정상적으로 작동합니다.
작업을 통해 들어오는 트래픽을 만들면서 현재 제대로 작동하는 부품을 유지하려면 어떻게 Router1
합니까?
동화:
나는 상황의 필수 요소로 아래 다이어그램을 스케치했습니다 (실제로는 각 LAN에 더 많은 장치가 있지만 중요하지는 않습니다).
이것은 상황입니다.
- 두 개의 내부 네트워크가 있습니다 :
LAN0
is192.168.x.0/24
andLAN1
is192.168.y.0/24
. 둘 다 내부 트래픽에 적합합니다 (예 : cURL을 사용하는 http ). LAN0
항상를 통해 연결되어Router0
및ISP0
받는 사람Internet
.LAN1
항상 있었다Router1
, 그러나 지금 통해 연결되어ISP1
받는 사람Internet
.LAN0
기본 경로가있는 컴퓨터 만Router0
나가고 들어오는 트래픽에 적합합니다.LAN1
기본 경로가있는 컴퓨터 만Router1
나가고 들어오는 트래픽에 적합합니다.- 내부 트래픽에
LAN0
와LAN1
항상 벌금을 일했다. - 을 통해 들어오는 트래픽
Router1
에 대한이WindowsB
제대로 도착 : 나는에서 RDP를 통해 연결할 수 있습니다WindowsC
. - 를 통해 들어오는 트래픽
Router1
에 대한LinuxB
(에 따라 도착 tcpdump를 ) 아니지만으로 다시 대답curl http://e.f.g.h
전면 데크의LinuxC
A를 쇼 에 tcpdump를LinuxB
보여줍니다 :
받는 항 – 이것은 패킷만을 도시 tcpdump에 출력 형식 -가 SYN의 플래그 세트 :
LinuxB:/tmp/LinuxB.eth1.80 # tcpdump -i eth1 'port 80'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
13:35:19.489779 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047182 ecr 0,sackOK,eol], length 0
13:35:19.788841 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047478 ecr 0,sackOK,eol], length 0
13:35:19.888835 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047578 ecr 0,sackOK,eol], length 0
13:35:19.989412 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047678 ecr 0,sackOK,eol], length 0
13:35:20.089685 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047778 ecr 0,sackOK,eol], length 0
13:35:20.190836 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047877 ecr 0,sackOK,eol], length 0
13:35:20.392123 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287048072 ecr 0,sackOK,eol], length 0
13:35:20.693692 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:21.197162 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:22.204134 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:24.115961 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:27.852374 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:31.967049 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
이것은 LinuxB
라우팅 테이블입니다.
LinuxB:/tmp/LinuxB.eth1.80 # route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.x.1 0.0.0.0 UG 0 0 0 eth0
loopback * 255.0.0.0 U 0 0 0 lo
link-local * 255.255.0.0 U 0 0 0 eth0
192.168.x.0 * 255.255.255.0 U 0 0 0 eth0
192.168.x.0 * 255.255.255.0 U 0 0 0 eth1
에서 RDP를 통해 연결 이후 WindowsC
에 WindowsB
작품 벌금,이 참으로 라우팅 문제가 다시 시작합니다. 이것은 WindowsB
라우팅 테이블입니다.
C:\temp>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 0c 29 35 77 e1 ...... AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport
0x3 ...00 0c 29 35 77 eb ...... VMware Accelerated AMD PCNet Adapter - Packet Scheduler Miniport
===========================================================================
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.x.1 192.168.x.4 10
0.0.0.0 0.0.0.0 192.168.y.1 192.168.y.4 5
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.x.0 255.255.255.0 192.168.x.4 192.168.x.4 10
192.168.x.4 255.255.255.255 127.0.0.1 127.0.0.1 10
192.168.x.255 255.255.255.255 192.168.x.4 192.168.x.4 10
192.168.y.0 255.255.255.0 192.168.y.4 192.168.y.4 10
192.168.y.4 255.255.255.255 127.0.0.1 127.0.0.1 10
192.168.y.255 255.255.255.255 192.168.y.4 192.168.y.4 10
224.0.0.0 240.0.0.0 192.168.x.4 192.168.x.4 10
224.0.0.0 240.0.0.0 192.168.y.4 192.168.y.4 10
255.255.255.255 255.255.255.255 192.168.x.4 192.168.x.4 1
255.255.255.255 255.255.255.255 192.168.y.4 192.168.y.4 1
Default Gateway: 192.168.y.1
===========================================================================
Persistent Routes:
Network Address Netmask Gateway Address Metric
0.0.0.0 0.0.0.0 192.168.y.1 5
0.0.0.0 0.0.0.0 192.168.x.1 10
어떻게 라우팅 LinuxB
을 다음과 같이 할 수 있습니까?
- 에 기본 경로를 유지
LinuxB
로192.168.x.1
나가는 트래픽을 사용하여 유지되도록Router0
/ISP0
- 에서 오는 들어오는 요청에 응답 유지
LAN0
에를LAN0
- 에서 오는 들어오는 요청에 응답 유지
LAN1
에를LAN1
- 를 통해
Router0
(a.b.c.d
/192.168.x.1
)을 통해 수신 요청에 계속 응답192.168.x.1
- 다음을 통해
Router1
(e.f.g.h
/192.168.y.1
)를 통해 수신 요청에 응답하기 시작합니다.192.168.y.1
- 보너스 :
Router1
페일 오버 또는로드 밸런스Router0
추신:
아래 의 PNG 이미지 는 무료 온라인 PlantUML 엔진을 통해 UML 텍스트 로 생성됩니다 . 원본 UML 텍스트를 보려면 PNG 이미지 링크 를이 PlantUML 양식에 붙여 넣은 다음를 누릅니다 .Submit
답변
오래 전에 그런 일을하기위한 쉘 스크립트가 있었지만 죄송합니다. 그래서 나는 그때 구현 한 솔루션에 대한 포인터 만 줄 수 있습니다. 나는 주로 메모리에서 글을 쓰고 있으므로 일부 예제가 누락되었습니다.
-
업 링크 당 하나의 라우팅 테이블이 있습니다 (ip route … table 101, ip route … table 102). / etc / iproute2 / rt_tables에 들어갑니다.
101 ISP1 102 ISP2
해당 테이블도 설정해야합니다.
IP 경로 $ Gateway1 dev $ Interface1 테이블 isp1을 통해 기본값 추가 IP 경로 $ Gateway2 dev $ Interface2 테이블 isp2를 통해 기본값 추가
# 기본 테이블을 잊지 마세요 :
IP 경로는 $ DefaultGateway dev $ DefaultInterface를 통해 기본값을 추가합니다
-
iptables 연결 추적 사용 (modprobe nf_conntrack)
- 새로 들어오는 연결에 대한 iptables 규칙을 설정하여 -j에 패킷을 표시합니다 (예 : 0x201, 0x202)
-
인터페이스가 올바른 라우팅 테이블을 사용하는 동안 트래픽이 나가도록 IP 규칙을 설정하십시오.
$ Ip1 테이블에서 ip 규칙 추가 isp1 $ Ip2 테이블에서 ip 규칙 추가 isp2
-
“0x201로 표시된 패킷은 라우팅 테이블 201을 조회해야합니다”라는 IP 규칙 (ip 규칙 추가 …)을 설정합니다. 이는 모든 업 링크마다 하나의 규칙입니다.
모든 것을 갖추고 있으면 모든 업 링크와의 연결을 수신하고 시작할 수 있으며 발신 연결의 균형을 유지할 수 있어야합니다.
이것이 기본입니다. Iptables + “ip route”+ “ip rule”을 사용하면 좋습니다.