Menghubungkan mesin Linux ke router sekunder / ISP: bagaimana cara mengatur routing dengan benar?

8

Abstrak:

Saya memiliki (saya menduga perutean) masalah ketika menambahkan ISP sekunder ke pengaturan jaringan saya yang ada: lalu lintas masuk Router1tidak dijawab, tetapi lalu lintas lokal dan masuk masuk Router0berfungsi dengan baik.

Bagaimana saya bisa menjaga bagian yang saat ini berfungsi dengan baik, sementara membuat lalu lintas masuk melalui Router1pekerjaan?

Elaborasi:

Saya telah membuat sketsa diagram di bawah ini dengan esensi telanjang situasi (dalam praktiknya ada lebih banyak perangkat di setiap LAN, tetapi mereka tidak masalah).

Inilah situasinya:

  • Saya memiliki dua jaringan internal: LAN0adalah 192.168.x.0/24dan LAN1sekarang 192.168.y.0/24. Keduanya berfungsi dengan baik untuk lalu lintas internal (misalnya http menggunakan cURL ).
  • LAN0selalu terhubung melalui Router0dan ISP0ke Internet Internet.
  • LAN1selalu memiliki Router1, tapi sekarang terhubung melalui ISP1ke Internet.
  • Mesin hanya hidup LAN0dan memiliki rute default melalui Router0kerja yang baik untuk lalu lintas keluar dan masuk.
  • Mesin hanya hidup LAN1dan memiliki rute default melalui Router1kerja yang baik untuk lalu lintas keluar dan masuk.
  • Lalu lintas internal menyala LAN0dan LAN1selalu berfungsi dengan baik.
  • Lalu lintas masuk melalui Router1untuk WindowsBtiba dengan benar: Saya dapat menghubungkannya melalui RDP dari WindowsC.
  • Lalu lintas masuk Router1untuk LinuxBkedatangan (menurut tcpdump ), tetapi tidak dijawab kembali saat curl http://e.f.g.hfron LinuxCmenunjukkan dengan tcpdump pada LinuxB acara:

Ini hanya memperlihatkan paket-paket yang - sesuai dengan format keluaran tcpdump - memiliki set flag 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

Ini adalah LinuxBtabel rute:

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

Sejak menghubungkan lebih dari RDP dari WindowsCke WindowsBbekerja dengan baik, saya melanjutkan ini memang masalah routing. Ini adalah WindowsBtabel rute:

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

Jadi bagaimana saya bisa mendapatkan perutean LinuxBmenjadi seperti ini:

  • menjaga standar rute di LinuxBke 192.168.x.1sehingga lalu lintas keluar terus menggunakan Router0/ISP0
  • terus menjawab permintaan masuk dari LAN0padaLAN0
  • terus menjawab permintaan masuk dari LAN1padaLAN1
  • tetap menjawab permintaan masuk melalui Router0( a.b.c.d/ 192.168.x.1) via192.168.x.1
  • mulai menjawab permintaan masuk melalui Router1( e.f.g.h/ 192.168.y.1) via192.168.y.1
  • bonus: memiliki Router1fail-over atau load-balance withRouter0

Nota bene:

Gambar PNG di bawah ini dihasilkan pada teks UML melalui mesin PlantUML online gratis . Jika Anda ingin melihat teks UML asli, rekatkan tautan gambar PNG ke formulir PlantUML ini , lalu tekan Submit.

masukkan deskripsi gambar di sini

Jeroen Wiert Pluimer
sumber
Baru saja menemukan jawaban yang menarik di unix.stackexchange.com/a/23345/69111 yang saya selidiki untuk melihat apakah itu berlaku untuk kasus saya, dan bagaimana menerapkannya menggunakan yast.
Jeroen Wiert Pluimers
1
Yasttampaknya keluar untuk melakukan perutean yang rumit dan routetampaknya tidak disukai lagi ip. Lihat opensuse.14.x6.nabble.com/yast2-advanced-routing-td3083578.html dan suse.com/documentation/sles11/book_sle_admin/data/…
Jeroen Wiert Pluimers
1
Solusi tertaut Anda di unix.stackexchange berjalan ke arah yang benar, dan akan menyelesaikan masalah linux - simpul linux memiliki dua tabel routing terpisah, dan menggunakan tabel yang sesuai tergantung pada antarmuka mana koneksi dimulai. Saya tidak mengetahui adanya solusi untuk Windows. Kecuali ada kebutuhan nyata untuk dua subnet, saya akan menyingkirkan satu dan menggunakan satu router untuk kedua ISP. Anda dapat membeli router yang dapat menangani dua WAN dengan benar, atau Anda dapat menggunakan sistem Linux lain untuk melakukannya, yang akan menyederhanakan perutean pada sistem di belakangnya.
David Mackintosh
@ Davidvidintack di masa depan saya akan. Ini sementara: serat sebenarnya DSL, dan akan pindah ke alamat serat yang berbeda. Mesin ini adalah DNS dan MX, jadi saya ingin dapat diakses dari dua ISP untuk memiliki kontinuitas karena saya tidak yakin apakah DSL akan dimatikan sebelum atau setelah serat menjadi aktif.
Jeroen Wiert Pluimers

Jawaban:

1

Saya punya skrip shell untuk melakukan sesuatu seperti itu sejak lama tapi, maaf, bisa menemukannya. Jadi saya hanya bisa memberi Anda petunjuk untuk solusi yang saya terapkan saat itu. Saya menulis sebagian besar dari memori sehingga beberapa contoh hilang:

  1. Saya punya satu tabel routing per uplink (rute ip ... tabel 101, rute ip ... tabel 102). Itu masuk ke / etc / iproute2 / rt_tables.

    101 isp1 102 isp2

    Anda perlu mengatur tabel-tabel itu juga:

    ip route add default via $ Gateway1 dev $ Interface1 table isp1 ip route add default via $ Gateway2 dev $ Interface2 table isp2

    # Jangan lupa tabel default:

    ip route add default via $ DefaultGateway dev $ DefaultInterface

  2. Aktifkan pelacakan koneksi iptables (modprobe nf_conntrack)

  3. Tetapkan aturan iptables untuk koneksi masuk BARU untuk -j MARK paket-paket itu entah bagaimana (yaitu: 0x201, 0x202)
  4. Tetapkan aturan ip yang memastikan lalu lintas keluar meskipun antarmuka menggunakan tabel perutean yang tepat

    ip rule add from $ ip1 table isp1 ip rule add dari $ ip2 table isp2

  5. Tetapkan aturan ip (tambahkan aturan ip ...) yang menyatakan bahwa "paket bertanda 0x201 akan mencari tabel routing 201", satu aturan untuk setiap uplink.

Dengan semua yang ada, Anda harus dapat menerima dan memulai koneksi dengan uplink apa pun dan bahkan menyeimbangkan koneksi keluar.

Itu akan menjadi dasar. Iptables + "ip route" + "ip rule" dan Anda siap melakukannya.

marc.fargas
sumber