Linux 시스템을 보조 라우터/ISP에 연결: 라우팅을 올바르게 설정하는 방법은 무엇입니까?

Linux 시스템을 보조 라우터/ISP에 연결: 라우팅을 올바르게 설정하는 방법은 무엇입니까?

추상적인:

기존 네트워크 설정에 보조 ISP를 추가할 때 (라우팅으로 추정되는) 문제가 있습니다. 들어오는 트래픽은 Router1응답되지 않지만 로컬 트래픽과 들어오는 트래픽은 Router0제대로 작동합니다.

업무를 통해 들어오는 트래픽을 만드는 동안 현재 잘 작동하는 부분을 어떻게 유지합니까 Router1?

동화:

나는 상황의 핵심을 담은 다이어그램을 아래에 스케치했습니다(실제로는 각 LAN에 더 많은 장치가 있지만 중요하지 않습니다).

상황은 다음과 같습니다.

  • 두 개의 내부 네트워크가 있습니다: LAN0is 192.168.x.0/24LAN1is 192.168.y.0/24. 둘 다 내부 트래픽에 대해 잘 작동합니다(예:http사용하여곱슬 곱슬하다).
  • LAN0Router0은(는) 항상 및 ISP0을(를) 통해 연결되었습니다 Internet.
  • LAN1항상 가 있었지만 지금은 을 Router1통해 연결되어 있습니다 .ISP1Internet
  • LAN0기본 경로가 있는 머신만 Router0나가고 들어오는 트래픽에 대해 잘 작동합니다.
  • LAN1기본 경로가 있는 머신만 Router1나가고 들어오는 트래픽에 대해 잘 작동합니다.
  • 내부 트래픽이 켜져 있고 LAN0항상 LAN1잘 작동했습니다.
  • Router1을 ( 를) 통해 들어오는 트래픽이 WindowsB올바르게 도착합니다. 에서 RDP를 통해 연결할 수 있습니다 WindowsC.
  • Router1도착 을 위한 들어오는 트래픽 LinuxB(다음에 따라)tcpdumpcurl http://e.f.g.h), 그러나 프론이 다음 LinuxC과 같이 표시되므로 응답하지 않았습니다.tcpdump 켜기 LinuxB쇼:

다음과 같은 패킷만 표시합니다.tcpdump 출력 형식- 가지고있다싱크플래그 세트:

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 이미지에 생성됩니다UML무료 온라인을 통해 문자 메시지를 보내세요.플랜트UML엔진. 원본 UML 텍스트를 보려면PNG 이미지 링크이것에PlantUML 양식을 누른 다음 를 누르십시오 Submit.

여기에 이미지 설명을 입력하세요

답변1

오래전에 그런 작업을 수행하기 위한 쉘 스크립트가 있었지만 죄송합니다. 찾을 수 있었습니다. 그래서 제가 당시 구현했던 솔루션에 대한 조언만 드릴 수 있습니다. 저는 주로 기억을 토대로 글을 쓰고 있기 때문에 몇 가지 예가 누락되었습니다.

  1. 업링크당 하나의 라우팅 테이블이 있었습니다(ip 경로 ... 테이블 101, ip 경로 ... 테이블 102). 이는 /etc/iproute2/rt_tables에 들어갑니다.

    101 isp1 102 isp2

    해당 테이블도 설정해야 합니다.

    ip 경로 $Gateway1 dev $Interface1 table isp1을 통해 기본값 추가 $Gateway2 dev $Interface2 table isp2를 통해 ip 경로 기본값 추가

    #기본 테이블을 잊지 마세요:

    $DefaultGateway dev $DefaultInterface를 통해 IP 경로에 기본값 추가

  2. iptables 연결 추적 활성화(modprobe nf_conntrack)

  3. 새로운 수신 연결에 대한 iptables 규칙을 -j로 설정하여 어떻게든 패킷을 표시합니다(예: 0x201, 0x202).
  4. 인터페이스를 통해 나가는 트래픽이 올바른 라우팅 테이블을 사용하도록 보장하는 IP 규칙을 설정하세요.

    $Ip1 테이블 isp1에서 IP 규칙 추가 $Ip2 테이블 isp2에서 IP 규칙 추가

  5. 모든 업링크에 대해 하나의 규칙인 "0x201로 표시된 패킷은 라우팅 테이블 201을 조회해야 합니다"라는 IP 규칙(ip 규칙 추가 ...)을 설정합니다.

모든 것이 준비되면 모든 완 업링크와의 연결을 수신하고 시작할 수 있으며 나가는 연결의 균형도 맞출 수 있어야 합니다.

이것이 기본이 될 것입니다. Iptables + "ip 경로" + "ip 규칙"을 사용하면 됩니다.

관련 정보