Kết nối máy Linux với bộ định tuyến / ISP thứ cấp: làm thế nào để thiết lập định tuyến chính xác?


8

Trừu tượng:

Tôi gặp sự cố (tôi đoán định tuyến) khi thêm ISP thứ cấp vào thiết lập mạng hiện tại của mình: lưu lượng truy cập đến Router1không được trả lời, nhưng lưu lượng truy cập cục bộ và thông qua Router0đang hoạt động tốt.

Làm cách nào tôi có thể giữ cho các bộ phận hiện đang hoạt động tốt trong khi thực hiện lưu lượng truy cập đến thông qua Router1công việc?

Xây dựng:

Tôi đã phác thảo một sơ đồ bên dưới với các yếu tố cần thiết của tình huống (trong thực tế có nhiều thiết bị hơn trên mỗi mạng LAN, nhưng chúng không quan trọng).

Đây là tình huống:

  • Tôi có hai mạng nội bộ: LAN0đang 192.168.x.0/24LAN1đang tồn tại 192.168.y.0/24. Cả hai đều hoạt động tốt cho lưu lượng truy cập nội bộ (ví dụ http sử dụng cURL ).
  • LAN0luôn luôn được kết nối thông qua Router0ISP0đến Internet.
  • LAN1luôn luôn có Router1, nhưng bây giờ được kết nối thông qua ISP1vào Internet.
  • Máy chỉ bật LAN0và có một tuyến mặc định thông qua Router0hoạt động tốt cho lưu lượng đi và đến.
  • Máy chỉ bật LAN1và có một tuyến mặc định thông qua Router1hoạt động tốt cho lưu lượng đi và đến.
  • Lưu lượng truy cập nội bộ LAN0LAN1luôn luôn hoạt động tốt.
  • Giao thông đến thông qua Router1cho WindowsBđến một cách chính xác: Tôi có thể kết nối với nó qua RDP từ WindowsC.
  • Lưu lượng truy cập đến Router1cho LinuxBđến (theo tcpdump ), nhưng không được trả lời lại như một chương trình curl http://e.f.g.hfron LinuxCvới một tcpdump trên các LinuxB chương trình:

Nó chỉ hiển thị các gói - theo định dạng đầu ra tcpdump - có bộ cờ 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

Đây là LinuxBbảng lộ trình:

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

Vì kết nối qua RDP WindowsCđể WindowsBhoạt động tốt, tôi tiếp tục đây thực sự là một vấn đề định tuyến. Đây là WindowsBbảng lộ trình:

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

Vì vậy, làm thế nào tôi có thể có được định tuyến LinuxBnhư thế này:

  • giữ tuyến đường mặc định LinuxBđể 192.168.x.1lưu lượng đi tiếp tục sử dụng Router0/ISP0
  • giữ trả lời yêu cầu đến từ LAN0trênLAN0
  • giữ trả lời yêu cầu đến từ LAN1trênLAN1
  • tiếp tục trả lời các yêu cầu đến thông qua Router0( a.b.c.d/ 192.168.x.1) thông qua192.168.x.1
  • bắt đầu trả lời các yêu cầu đến thông qua Router1( e.f.g.h/ 192.168.y.1) thông qua192.168.y.1
  • phần thưởng: có sự Router1thất bại hoặc cân bằng tải vớiRouter0

Bản thảo:

Các hình ảnh PNG dưới đây được tạo ra trên UML văn bản thông qua việc trực tuyến miễn phí PlantUML động cơ. Nếu bạn muốn xem văn bản UML gốc, hãy dán liên kết hình ảnh PNG vào biểu mẫu PlantUML này , sau đó nhấn Submit.

nhập mô tả hình ảnh ở đây


Chỉ cần tìm thấy một câu trả lời thú vị tại unix.stackexchange.com/a/23345/69111 mà tôi đang điều tra xem liệu nó có áp dụng cho trường hợp của tôi không và cách triển khai bằng cách sử dụng yast.
Jeroen Wiert Pluimers 18/07/14

1
Yastdường như để thực hiện định tuyến phức tạp và routedường như không được ủng hộ ip. Xem opensuse.14.x6.nabble.com/yast2-advified-routing-td3083578.htmlsuse.com/documentation/sles11/book_sle_admin/data/iêu
Jeroen Wiert Pluimers 18/07/14

1
Giải pháp được liên kết của bạn tại unix.stackexchange đang đi đúng hướng và sẽ giải quyết vấn đề linux - nút linux có hai bảng định tuyến riêng biệt và sử dụng bảng thích hợp tùy thuộc vào giao diện nào được kết nối. Tôi không biết về bất kỳ giải pháp nào như vậy cho Windows. Trừ khi có nhu cầu thực sự cho hai mạng con, tôi sẽ loại bỏ một và sử dụng một bộ định tuyến cho cả hai ISP. Bạn có thể mua các bộ định tuyến có thể xử lý đúng hai mạng WAN hoặc bạn có thể sử dụng một hệ thống Linux khác để thực hiện việc này, điều này sẽ đơn giản hóa việc định tuyến trên các hệ thống đằng sau nó.
David Mackffy

@DavidMackffy trong tương lai tôi sẽ làm. Điều này là tạm thời: sợi thực sự là DSL và sẽ chuyển đến một địa chỉ sợi khác. Máy là DNS và MX, vì vậy tôi muốn nó có thể truy cập được từ hai ISP để có tính liên tục vì tôi không chắc DSL sẽ bị tắt trước hay sau khi cáp quang hoạt động.
Jeroen Wiert Pluimers 18/07/14

Câu trả lời:


1

Tôi đã có một kịch bản shell để làm một cái gì đó như thế từ lâu nhưng, xin lỗi, có thể tìm thấy nó. Vì vậy, tôi chỉ có thể cung cấp cho bạn các gợi ý cho các giải pháp tôi đã thực hiện trước đó. Tôi đang viết chủ yếu từ bộ nhớ nên một số ví dụ bị thiếu:

  1. Tôi đã có một bảng định tuyến cho mỗi đường lên (tuyến ip ... bảng 101, tuyến ip ... bảng 102). Điều đó đi vào / etc / iproute2 / rt_tables.

    101 isp1 102 isp2

    Bạn cũng cần thiết lập các bảng đó:

    tuyến ip thêm mặc định qua $ Gateway1 dev $ Interface1 bảng isp1 ip tuyến thêm mặc định qua $ Gateway2 dev $ Interface2 bảng isp2

    # Đừng quên bảng mặc định:

    tuyến ip thêm mặc định qua $ DefaultGateway dev $ DefaultInterface

  2. Bật theo dõi kết nối iptables (modprobe nf_conntrack)

  3. Đặt quy tắc iptables cho các kết nối đến MỚI thành -j Đánh dấu các gói bằng cách nào đó (ví dụ: 0x201, 0x202)
  4. Đặt quy tắc ip để đảm bảo lưu lượng đi ra ngoài giao diện sử dụng bảng định tuyến phù hợp

    quy tắc ip thêm từ bảng $ Ip1 isp1 quy tắc ip thêm từ bảng $ Ip2 isp2

  5. Đặt quy tắc ip (quy tắc ip thêm ...) nói rằng "các gói được đánh dấu 0x201 sẽ tra cứu bảng định tuyến 201", một quy tắc cho mỗi đường lên.

Với mọi thứ sẵn sàng, bạn sẽ có thể nhận và bắt đầu các kết nối với bất kỳ đường lên wan nào và thậm chí cân bằng các kết nối đi.

Đó sẽ là những điều cơ bản. Iptables + "ip route" + "ip rule" và bạn tốt để đi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.