所以我有一台有 4 个接口的 linux 机器:
- enp1s0
- enp2s0
- enp3s0
- enp4s0
我要做的是让 enp1s0 成为 WAN 接口,并通过 DHCP 获取它的 IP 地址、dns 和网关。
对于其他三个接口,我希望它们具有:
- 同一子网上的 IP 地址
- 让一个 LAN 接口上的所有主机能够看到另一个 LAN 接口上的所有其他主机
- 将shorewall作为防火墙运行
- 使用 DNS 掩码
这是我到目前为止所得到的:
猫 /etc/网络/接口 # 此文件描述系统上可用的网络接口 # 以及如何激活它们。有关详细信息,请参阅接口 (5)。 源 /etc/network/interfaces.d/* # 环回网络接口 自动lo iface lo inet 环回 # 主网络接口 #列为#1 # 这是wan接口 自动 enp1s0 iface enp1s0 inet dhcp #列为#2 # 这个路由到楼上 自动 enp3s0 iface enp3s0 inet 静态 地址 192.168.47.254 网络掩码 255.255.255.0 网络 192.168.47.0 广播 192.168.47.255 #列为#4 自动 enp2s0 iface enp2s0 inet 静态 地址 192.168.47.253 网络掩码 255.255.255.0 网络 192.168.47.0 广播 192.168.47.255 #列为#3 自动 enp4s0 iface enp4s0 inet 静态 地址 192.168.47.252 网络掩码 255.255.255.0 网络 192.168.47.0 广播 192.168.47.255
猫 /etc/dnsmasq.conf 接口=enp2s0 接口=enp3s0 接口=enp4s0 listen-address=192.168.47.254 # 明确指定要监听的地址 bind-interfaces # 绑定到接口以确保我们不会将东西发送到其他地方 server=8.8.8.8 # 将 DNS 请求转发到 Google DNS domain-needed # 不要转发短名称 bogus-priv # 从不转发非路由地址空间中的地址。 dhcp-range=192.168.47.100,192.168.47.250,12h # 分配 192.168.46.100-250 之间的 IP 地址,租用时间为 12 小时 日志-dhcp 日志查询
interface=enp2s0 # 使用接口 wlan0 interface=enp3s0 # 使用接口 wlan0 interface=enp4s0 # 使用接口 wlan0 listen-address=192.168.47.254 # 明确指定要监听的地址 bind-interfaces # 绑定到接口以确保我们不会将东西发送到其他地方 server=8.8.8.8 # 将 DNS 请求转发到 Google DNS domain-needed # 不要转发短名称 bogus-priv # 从不转发非路由地址空间中的地址。 dhcp-range=192.168.47.100,192.168.47.250,12h # 分配 192.168.46.100-250 之间的 IP 地址,租用时间为 12 小时 日志-dhcp 日志查询
这是来自其中一台客户端机器的示例 ip 路由表:
ip -one 地址 1: lo inet 127.0.0.1/8 范围主机 lo\ valid_lft forever preferred_lft forever 1: lo inet6 ::1/128 范围主机\valid_lft 永远首选_lft 2:eth0 inet 192.168.46.5/24 brd 192.168.46.255 范围全局 eth0\valid_lft 永远 Preferred_lft 2: eth0 inet6 fe80::82ee:73ff:fe5d:89d1/64 范围链接\valid_lft forever preferred_lft forever 3: eth1 inet 192.168.47.244/24 brd 192.168.47.255 范围全局 eth1\ valid_lft 永远首选_lft 永远 3: eth1 inet6 fe80::82ee:73ff:fe5d:89d0/64 范围链接\valid_lft 永远首选_lft 永远
路线-n 内核IP路由表 目标网关 Genmask 标志 Metric Ref Use 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通路由器上的所有接口,也可以不通。我认为这可能取决于最近使用 DHCP 的哪台机器
- 如果我可以从客户端机器 ping 通,其他的东西也可以工作,例如 ssh
- 我从来没有让两台客户端机器互相ping通
经过大量阅读,我确定我需要静态路由、每个 LAN 接口的不同子网或桥接。
理想情况下,我想根据接口在shorewall中设置权限,并且仍然为所有LAN接口使用一个子网。
您完全走错了路,它与 Shorewall(或实际上任何其他防火墙包)没有任何关系,而是与一般的 IP 网络有关。
如果您想象一个给定的 IP 主机在同一个子网中有三个接口,并且一个数据包从第四个子网到达该子网,那么该主机如何知道三个接口中的哪个接口应该接收数据包?它在所有三个中都 ARP 吗?它是否只是将所有流量发送到出现的第一个流量,从而阻止流量流向其他两个流量?这就是为什么如果您尝试从 shell 配置它,您会收到有关重叠子网的错误消息。
所以 - 你有三个合理的选择,还有几个子选项。
转储其他两个接口,只需将单个端口连接到交换机,然后将主机(可能还有同一子网中的 wifi)挂在该交换机上。可以将所有三个内部接口加入到单个绑定或团队中,但这基本上需要所有三个物理接口并将它们变成单个逻辑接口。
创建 Linux 桥接接口。将 IP、DHCP 和其他配置元素提供给网桥,然后将三个物理接口绑定为网桥的成员。您的防火墙将单个网桥接口视为内部(......即使它连接到三个网段)。再一次 - 从 IP 的角度来看,您在内部子网中 有一个接口,而不是三个。
将三个接口放在三个不重叠的 IP 子网中并进行相应配置。