如何正确设置4个接口的机器上的路由,使三个接口在同一个子网上?

所以我有一个有4个接口的Linux机器:

  1. enp1s0
  2. enp2s0
  3. enp3s0
  4. enp4s0

我想要做的就是将WAN接口设置为enp1s0,并通过DHCP获取其IP地址,DNS和网关。

对于其他三个接口,我希望他们有:

  • 同一子网上的IP地址
  • 让一个局域网接口上的所有主机都能够看到其他局域网接口上的所有其他主机
  • 运行shorewall作为防火墙
  • 使用DNS Masq

这是我到目前为止:

猫/ etc / network / interfaces
 #此文件描述您的系统上可用的networking接口
 #以及如何激活它们。 有关更多信息,请参阅接口(5)。

源/etc/network/interfaces.d/*

 #环回networking接口
汽车
 iface lo inet loopback

 #主要networking接口
 #列为#1 
 #这是wan界面
自动enp1s0
 iface enp1s0 inet dhcp

 #列为#2
 #这条路线到楼上
自动enp3s0
 iface enp3s0 inet static
    地址192.168.47.254
    networking掩码255.255.255.0
    networking192.168.47.0    
    广播192.168.47.255    

 #列为#4
自动enp2s0
 iface enp2s0 inet static
    地址192.168.47.253
    networking掩码255.255.255.0
    networking192.168.47.0    
    广播192.168.47.255    

 #列为#3
自动enp4s0
 iface enp4s0 inet static
    地址192.168.47.252
    networking掩码255.255.255.0
    networking192.168.47.0    
    广播192.168.47.255    
 cat /etc/dnsmasq.conf
接口= enp2s0
接口= enp3s0
接口= enp4s0
 listen-address = 192.168.47.254#明确指定要监听的地址  
绑定接口#绑定到接口,以确保我们不在其他地方发送东西  
 server = 8.8.8.8#将DNS请求转发给Google DNS  
域名需要#不要转发短名称  
 bogus-priv#不要在非路由地址空间中转发地址。  
 dhcp-range = 192.168.47.100,192.168.47.250,12h#在192.168.46.100-250之间分配IP地址,租约时间为12小时 

loginDHCP
login查询
 interface = enp2s0#使用接口wlan0  
 interface = enp3s0#使用接口wlan0  
 interface = enp4s0#使用接口wlan0  
 listen-address = 192.168.47.254#明确指定要监听的地址  
绑定接口#绑定到接口,以确保我们不在其他地方发送东西  
 server = 8.8.8.8#将DNS请求转发给Google DNS  
域名需要#不要转发短名称  
 bogus-priv#不要在非路由地址空间中转发地址。  
 dhcp-range = 192.168.47.100,192.168.47.250,12h#在192.168.46.100-250之间分配IP地址,租约时间为12小时 

loginDHCP
login查询

这里是一个客户端机器的示例ip路由表:

 ip -one addr
 1:lo inet 127.0.0.1/8 scope host lo \ valid_lft forever永远是preferred_lft
 1:lo inet6 :: 1/128 scope host \ valid_lft forever永远的preferred_lft
 2:eth0 inet 192.168.46.5/24 brd 192.168.46.255 scope global eth0 \ valid_lft forever forever_lft forever
 2:eth0 inet6 fe80 :: 82ee:73ff:fe5d:89d1 / 64范围链接\ valid_lft永远preferred_lft永远
 3:eth1 inet 192.168.47.244/24 brd 192.168.47.255范围全局eth1 \ valid_lft永远preferred_lft永远
 3:eth1 inet6 fe80 :: 82ee:73ff:fe5d:89d0 / 64范围链接\ valid_lft永远preferred_lft永远
路线-n
内核IP路由表
目标网关Genmask标志度量参考使用Iface
 0.0.0.0 192.168.46.1 0.0.0.0 UG 0 0 0 eth0
 192.168.46.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
 192.168.47.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1

到目前为止,

  • 不同接口上的机器获得正确的IP地址
  • 机器可以ping通路由器上的所有接口,也可以ping不通。 我想这可能取决于哪台机器最近DHCP'ed
  • 如果我可以从客户机ping,其他的东西也工作,如SSH
  • 我从来没有得到两台客户端的机器互相ping通

经过大量的阅读,我已经确定,我需要静态路由,不同的子网为每个lan接口或桥接。

理想情况下,我想在基于接口的shorewall中设置权限,并为所有LAN接口仍然使用一个子网。

你完全错了,和Shorewall(或其他任何防火墙软件包)没有任何关系,而是一般的IPnetworking。

如果你想象一个给定的IP主机在同一子网中有三个接口,并且一个数据包从第四个到达该子网,那么这个主机如何知道三个接口中的一个应该接收数据包? 它在所有三个ARP? 它是否只是把所有的stream量发送到第一个stream量,从而防止另外两个stream量? 这就是为什么如果你试图从shellconfiguration这个,你会得到一个有关重叠子网的错误消息。

所以 – 你有三个合理的select,有几个子选项。

  1. 转储其他两个接口,只需将一个端口连接到交换机,然后将该交换机上的主机(以及可能在相同子网中的wifi)挂起。 将所有三个内部接口连接到一个单一的绑定或者团队中是可能的,但是这基本上将所有三个物理接口并入到一个单一的逻辑接口中。

  2. 创build一个Linux桥接口。 将IP,DHCP和其他configuration元素提供给网桥,然后将三个物理接口绑定为网桥的成员。 您的防火墙将单个网桥接口视为内部(即使它连接到三个网段)。 再次 – 从IP的angular度来看,在内部子网中有一个接口,而不是三个。

  3. 将三个接口放在三个不重叠的IP子网中并进行相应的configuration。