Debian

在兩個網路介面上分離網路流量

  • September 7, 2021

您能否借用您的專業知識來了解如何在兩個網路介面上配置網路流量分離?

到目前為止,據我所知,靜態路由用於並非旨在使用預設網關的網路流量。預設網關用於所有不以本地網路為目的地的流量,並且在路由表中沒有為其指定首選路由。

場景如下。

  • 網路中的每台電腦都有兩個網卡。
  • 每個的生產介面是eth0(GW = 10.10.10.1)。
  • 每個的管理介面是eth1(GW = 192.168.100.1)。
  • 生產和管理流量應該完全分開。

我在下面發布了我用 Debian Wheezy 嘗試過的東西。而且,我的問題是,儘管我將主機設置為可以在兩個介面上進行通信,但各個主機似乎“聽到”了錯誤介面上的流量。例如:

主機 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)

從主機 140,我執行這個命令:tcpdump -i eth0. 在主機 140 上的單獨會話中,我執行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

為什麼我看到上面的輸出eth0?我想我應該只看到 10.10.10.140 的流量。正如預期的那樣,我也看到了這個eth1

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

如果我從主機 50 ping (相同ifconfig的結果 - 只是最後一個四邊形不同),然後eth0是靜默的,並且我看到 ICMP echos on eth1,正如預期的那樣。

我想了解如何配置每個介面以僅處理它在兩個主要 Linux 變體中負責的流量。我想我快到了,但我錯過了一些我似乎無法找到的東西。

  • Debian Wheezy (7.x) 或 Debian Jessie (8.x)
  • 企業 Linux (6.x) (RedHat/CentOS/Scientific/Oracle)。

我知道 Debian 的解決方案應該對 Wheezy 和 Jessie 都有好處,並且 EL 的解決方案應該對所有 EL 6.x 版本都相同。我想避免使用 RC 腳本來執行命令,而是選擇使用配置文件。

在Debian中,我知道的相關配置文件是:

  • /etc/network/interfaces

在EL 6.x中,我知道的相關配置文件有:

  • /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

我的 Debian 8“傑西”/etc/network/interfaces文件:

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

我認為netstat -anr可以說明問題:

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

我很想了解更多關於這個主題的資訊,以將配置改進為最好的,但這是我到目前為止所擁有的。即使沒有在所有網路介面net.ipv4.conf.all.arp_filter = 0

文件 ,/etc/iproute2/rt_tables至少在 EL 6.x 和 DEB 7/8 中是相同的。這是為靜態路由創建命名路由表的文件。

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

上面,命名的靜態路由的編號 252 基本上是任意的;或者,每個靜態路由都有自己的唯一編號,介於 1 到 252 之間。

該文件,/etc/network/interfaces在 DEB 7/8 中,至少:

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

ip route show在 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

EL 6.x/etc/sysconfig/network文件:

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1

上面,GATEWAY 是預設路由。下面,如果 BOOTPROTOCOL 設置為 DHCP,則預設路由將從 DHCP 獲取。

EL 6.x/etc/sysconfig/network-scripts/ifcfg-eth0文件,沒有“HWADDR”和“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

EL 6.x/etc/sysconfig/network-scripts/ifcfg-eth1文件,沒有“HWADDR”和“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

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

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

from 192.168.100.0/24 lookup mgmt

ip route showEL 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
default via 10.10.10.1 dev eth0

RHEL8 更新

上述方法適用於 RHEL 6 和 RHEL 7 以及衍生版本,但對於 RHEL 8 和衍生版本,必須先安裝network-scripts才能使用上述方法。

dnf install network-scripts

安裝會產生一個警告,該警告network-scripts將在 RHEL 的下一個主要版本之一中刪除,並且 NetworkManager 也提供ifup/ifdown腳本。

Ubuntu 20.04 LTS 更新

創建一個命名路由表是可以的,但不是必需的netplan,它無論如何都不會使用該名稱。儘管如此,文件中命名路由表的編號rt_tables仍可用於netplan. 對應的 NIC 是enps03( eth0) 和enp0s8( eth1)。

network:
 version: 2
 ethernets:
   enp0s3:
     addresses:
     - 10.10.10.140/24
     dhcp4: false
     dhcp6: false
     gateway4: 10.10.10.1
     nameservers:
       addresses:
       - 1.2.3.4
       - 1.2.3.5
       search:
       - your-search-domain-name.com
   enp0s8:
     dhcp4: false
     dhcp6: false
     addresses:
     - 192.168.100.140/24
     routes:
     - to: 192.168.100.0/24
       via: 192.168.100.1
       table: 252
     routing-policy:
     - from: 192.168.100.0/24
       table: 252

這導致以下路線來自ip r s.

default via 10.10.10.1 dev enp0s3 proto static
10.10.10.0/24 dev enp0s3 proto kernel scope link src 10.10.10.140
192.168.100.0/24 dev enp0s8 proto kernel scope link src 192.168.100.140

引用自:https://unix.stackexchange.com/questions/200188