在兩個網路介面上分離網路流量
您能否借用您的專業知識來了解如何在兩個網路介面上配置網路流量分離?
到目前為止,據我所知,靜態路由用於並非旨在使用預設網關的網路流量。預設網關用於所有不以本地網路為目的地的流量,並且在路由表中沒有為其指定首選路由。
場景如下。
- 網路中的每台電腦都有兩個網卡。
- 每個的生產介面是
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 oneth1
,正如預期的那樣。我想了解如何配置每個介面以僅處理它在兩個主要 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 show
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 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