在两个网络接口上分离网络流量


11

您能否借助您的专业知识来理解如何配置两个网络接口上的网络流量分离?

到目前为止,据我了解,静态路由用于网络流量,该流量不旨在使用默认网关。默认网关用于所有不面向本地网络且在路由表中未指定首选路由的流量。

情况如下。

  • 网络中的每台计算机都有两个网卡。
  • 每个产品的生产接口为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回显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“ Jessie” /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

检查iptabels -L -t nat
PersianGulf 2015年

Answers:


7

我很想了解有关此主题的更多信息,以将配置优化为最佳状态,但是到目前为止,这是我所拥有的。net.ipv4.conf.all.arp_filter = 0如@spuk所述,即使没有在所有网络接口()上启用ARP过滤,在这种配置下流量似乎也被完全隔离了。

/etc/iproute2/rt_tables至少在EL 6.x和DEB 7/8中是相同的文件。这是为静态路由创建命名路由表的文件。

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

上面,已命名的静态路由1的数量基本上是任意的;或者,每条静态路由都会在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
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

4

我还没有完整阅读您的所有文章(对不起,现在不能真正花时间),但是我相信这可能与Linux实现IP主机模型的方式有关:

... Linux中的IPv4实现默认为弱主机模型。...

在同一页面上:

...如果IP堆栈是使用弱主机模型实现的,则它将接受任何以本地为目的地的数据包,而不管接收数据包的网络接口如何。...

也就是说,在Linux中,默认情况下,IP地址“属于主机”,而不是严格“属于接口”。您可以通过改变行为arp_filterrp_filterarp_announcearp_ignore的sysctl(从获得LVS:将ARP问题,看到这里)。另外,请参阅ip-sysctl.txt


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.