Pisahkan Lalu Lintas Jaringan pada Dua Antarmuka Jaringan

11

Bisakah Anda meminjamkan keahlian Anda dalam memahami bagaimana cara mengkonfigurasi pemisahan lalu lintas jaringan pada dua antarmuka jaringan?

Sejauh yang saya mengerti sejauh ini, rute statis digunakan untuk lalu lintas jaringan yang tidak dirancang untuk menggunakan gateway default. Gateway default digunakan untuk semua lalu lintas yang tidak diperuntukkan bagi jaringan lokal dan yang tidak ada rute pilihan telah ditentukan dalam tabel routing.

Skenarionya adalah sebagai berikut.

  • Setiap komputer dalam jaringan memiliki dua kartu jaringan.
  • Antarmuka produksi untuk masing-masing adalah eth0(GW = 10.10.10.1).
  • Antarmuka manajemen untuk masing-masing adalah eth1(GW = 192.168.100.1).
  • Lalu lintas Produksi dan Manajemen harus sepenuhnya dipisahkan.

Saya telah memposting, di bawah ini, hal-hal apa yang saya coba dengan Debian Wheezy. Dan, masalah saya adalah bahwa, meskipun saya memiliki host yang diatur sedemikian rupa sehingga mereka berkomunikasi pada kedua antarmuka, masing-masing host tampaknya "mendengar" lalu lintas pada antarmuka yang salah. Sebagai contoh:

Tuan rumah 140

eth0      Link encap:Ethernet  HWaddr 08:00:27:d1:b6:8f
          inet addr:10.10.10.140  Bcast:10.10.10.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fed1:b68f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1341 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2530 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:641481 (626.4 KiB)  TX bytes:241124 (235.4 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:ad:14:b6
          inet addr:192.168.100.140  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fead:14b6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7220 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5257 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:602485 (588.3 KiB)  TX bytes:1022906 (998.9 KiB)

Dari host 140, saya menjalankan perintah ini: tcpdump -i eth0. Dalam sesi terpisah pada host 140, saya mengeksekusi ping 192.168.100.50.

19:17:29.301565 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 10, length 64
19:17:30.301561 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 11, length 64
19:17:31.301570 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 12, length 64
19:17:32.301580 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 13, length 64

Mengapa saya melihat output di atas eth0? Saya pikir saya hanya akan melihat traffic untuk 10.10.10.140. Saya juga melihat ini eth1, seperti yang diharapkan:

19:18:47.805408 IP 192.168.100.50 > 192.168.100.140: ICMP echo request, id 1605, seq 247, length 64

Jika saya melakukan ping dari Host 50 ( ifconfighasil yang sama - hanya quad terakhir yang berbeda), maka eth0diam, dan saya melihat gema ICMP menyala eth1, seperti yang diharapkan.

Saya ingin memahami cara mengkonfigurasi setiap antarmuka untuk menangani hanya lalu lintas yang bertanggung jawab dalam dua varietas Linux utama. Saya pikir saya hampir sampai, tetapi saya kehilangan sesuatu yang sepertinya tidak bisa saya temukan.

  • Debian Wheezy (7.x) atau Debian Jessie (8.x)
  • Enterprise Linux (6.x) (RedHat / CentOS / Scientific / Oracle).

Saya tahu bahwa solusi untuk Debian harus baik untuk Wheezy dan Jessie, dan bahwa solusi untuk EL harus sama untuk semua versi EL 6.x. Saya ingin menghindari menggunakan skrip RC untuk menjalankan perintah, dan memilih untuk menggunakan file konfigurasi.

Di Debian file konfigurasi yang relevan yang saya ketahui adalah:

  • /etc/network/interfaces

Di EL 6.x, file konfigurasi yang relevan yang saya ketahui adalah:

  • /etc/sysconfig/network
  • /etc/sysconfig/network-scripts/ifcfg-eth0
  • /etc/sysconfig/network-scripts/ifcfg-eth1
  • /etc/sysconfig/network-scripts/route-eth0
  • /etc/sysconfig/network-scripts/route-eth1
  • /etc/sysconfig/network-scripts/rule-eth0
  • /etc/sysconfig/network-scripts/rule-eth1

/etc/network/interfacesFile "Jessie" Debian 8 saya :

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# Production interface
auto eth0
allow-hotplug eth0
iface eth0 inet static
  address 10.10.10.140
  netmask 255.255.255.0
  gateway 10.10.10.1

# Management interface
auto eth1
allow-hotplug eth1
iface eth1 inet static
  address 192.168.100.140
  netmask 255.255.255.0

Saya pikir netstat -anrmungkin menggambarkan masalah:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.10.10.1      0.0.0.0         UG        0 0          0 eth0
10.10.10.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 eth1
Christopher
sumber
checkiptabels -L -t nat
PersianGulf

Jawaban:

7

Saya ingin tahu lebih banyak tentang topik ini untuk memperbaiki konfigurasi menjadi yang terbaik, tetapi inilah yang saya miliki sejauh ini. Bahkan tanpa mengaktifkan penyaringan ARP pada semua antarmuka jaringan ( net.ipv4.conf.all.arp_filter = 0), seperti yang disebutkan oleh @spuk, lalu lintas tampaknya benar-benar dipisahkan dalam konfigurasi ini.

File,, /etc/iproute2/rt_tablessama di EL 6.x dan DEB 7/8, setidaknya. Ini adalah file yang membuat tabel routing bernama untuk rute statis.

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
1 mgmt

Di atas, jumlah yang dinamai, rute statis, 1, pada dasarnya arbitrer; atau, setiap rute statis mendapatkan nomor uniknya sendiri antara 1 dan 252.

File, /etc/network/interfacesdalam DEB 7/8, setidaknya:

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
  iface lo inet loopback

# The production network interface
# The 'gateway' directive is the default route.
# Were eth0 configured via DHCP, the default route would also be here.
auto eth0
allow-hotplug eth0
iface eth0 inet static
  address 10.10.10.140
  netmask 255.255.255.0
  gateway 10.10.10.1

# The management network interface
# The 'gateway' directive cannot be used again because there can be
# one, and only one, default route. Instead, the 'post-up' directives
# use the `mgmt` static route.
auto eth1
allow-hotplug eth1
iface eth1 inet static
  address 192.168.100.140
  netmask 255.255.255.0
  post-up ip route add 192.168.100.0/24 dev eth1 src 192.168.100.140 table mgmt
  post-up ip route add default via 192.168.100.1 dev eth1 table mgmt
  post-up ip rule add from 192.168.100.140/32 table mgmt
  post-up ip rule add to 192.168.100.140/32 table mgmt

Hasil dari ip route showdi Debian:

default via 10.10.10.1 dev eth0
10.10.10.0/24 dev eth0  proto kernel  scope link  src 10.10.10.140
192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.140

File EL 6.x /etc/sysconfig/network:

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1

Di atas, GATEWAY adalah rute default. Di bawah, jika BOOTPROTOCOL diatur ke DHCP, rute default akan diperoleh dari DHCP.

/etc/sysconfig/network-scripts/ifcfg-eth0File EL 6.x , tanpa "HWADDR" dan "UUID":

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=10.10.10.140
NETMASK=255.255.255.0
NETWORK=10.10.10.0
BROADCAST=10.10.10.255

/etc/sysconfig/network-scripts/ifcfg-eth1File EL 6.x , tanpa "HWADDR" dan "UUID":

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=192.168.100.140
NETMASK=255.255.255.0
NETWORK=192.168.100.0
BROADCAST=192.168.100.255

File EL 6.x /etc/sysconfig/network-scripts/route-eth1:

192.168.100.0/24 dev eth1 table mgmt
default via 192.168.100.1 dev eth1 table mgmt

File EL 6.x /etc/sysconfig/network-scripts/rule-eth1:

from 192.168.100.0/24 lookup mgmt

Hasil ip route showpada EL 6.x:

192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.160
10.10.10.0/24 dev eth0  proto kernel  scope link  src 10.10.10.160
169.254.0.0/16 dev eth0  scope link  metric 1002
169.254.0.0/16 dev eth1  scope link  metric 1003
default via 10.10.10.1 dev eth0
Christopher
sumber
4

Saya belum membaca seluruh posting Anda (maaf, tidak bisa menghabiskan waktu sekarang), tapi saya percaya itu mungkin terkait dengan cara Linux mengimplementasikan model IP host :

... Implementasi IPv4 di Linux default ke model host lemah. ...

Dari halaman yang sama:

... Jika tumpukan IP diimplementasikan dengan model host yang lemah, ia menerima paket yang ditentukan secara lokal terlepas dari antarmuka jaringan tempat paket tersebut diterima. ...

Artinya, di Linux, secara default, alamat IP "milik host", tidak sepenuhnya "ke antarmuka". Anda dapat mengubah perilaku itu melalui arp_filter, rp_filter, arp_announce, arp_ignoresysctls (dapatkan dari LVS: The ARP Masalah , terlihat di sini ). Juga, lihat ip-sysctl.txt .

spuk
sumber
Artikel ini bekerja dengan baik untuk saya: sivel.net/2006/12/linux-multi-homing
Richard Gomes