我有一台运行 Ubuntu 18.04 的 PC,并尝试将两个 GbE 接口配置为网关/路由器。我参考了一些相关问题,并尝试遵循以下指南:如何从 Ubuntu Server 18.04 LTS 创建一个简单的路由器\网关。
高级意图是让其中一个 NIC 成为“WAN”接口 (enp2s0),通过 DHCP 从上游的另一个路由器 (18.1.0.0/24) 接收其地址、名称服务器、网关等,而另一个 NIC 则用作“LOCAL”接口 (enp0s31f6),连接到备用子网 (192.168.0.0/24) 下具有静态分配地址的多个设备。期望的行为是让连接到静态“第 2 层”网络 (192.168.0.0/24) 的设备能够访问 WAN“第 3 层”网络 (18.1.0.0/24),进而根据配置提供对互联网的访问。为此,两个子网之间需要有 SNAT。
以下是一个网络拓扑图,供参考: 双网卡网关/路由器
使用以下配置我看到的是,“本地”网络(192.168.0.0/24)上的设备可以访问同一子网上的其他设备,可以通过其 18.1.0.0/24 地址(实际上由 DHCP 分配)访问 WAN 接口本身,但无法成功超越 WAN 接口到达该网络上的其他 18.1.0.0/24 设备(对 18.1.0.0/24 地址上的已知设备进行 ping 操作时不会返回到主机的路由)。
我尝试通过 netplan 配置接口,如下所示:
network:
ethernets:
enp2s0:
#WAN
dhcp4: yes
dhcp4-overrides:
route-metric: 100
gateway4: 18.1.0.1
nameservers: [8.8.8.8, 8.8.4.4]
enp0s31f6:
#LOCAL
addresses:
- 192.168.0.1/24
dhcp4: no
version: 2
然后我通过以下方式启用 IP 转发
sudo nano /etc/sysctl.conf
并取消注释net.ipv4.ip_forward=1
最后(重启后)我通过以下方式配置了 SNAT 和基本防火墙规则的 IP 表:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o enp2s0 -j MASQUERADE
sudo iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -m state --state RELATED -j ACCEPT
sudo iptables -A FORWARD -i enp2s0 -o enp0s31f6 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo apt-get install iptables-persistent
为了进行测试,我将一个设备连接到“本地”NIC(192.168.0.0/24),并在该子网内保留静态地址(测试时为 192.168.0.99/24),并将网关设置为网关 NIC 的地址(本例中为 192.168.0.1)。我可以“看到”(ping)网关和静态分配给 192.168.0.0/24 子网的其他设备以及 WAN NIC 本身的地址(由 DHCP 分配,当前为 18.1.0.94),没有任何问题,但无法访问(ping)我知道的 18.1.0.0/24 子网上的任何其他设备。
我将非常感激任何有关我可能在这里配置中遗漏的内容的提示!
使用 IP 表保存进行更新
根据评论中的请求,以下是上述 iptables 命令创建的规则文件 (rules.v4):
# Generated by iptables-save v1.6.1 on Wed Sep 2 16:25:54 2020
*filter
:INPUT ACCEPT [117:21241]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [103:6753]
-A FORWARD -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -m state --state RELATED -j ACCEPT
COMMIT
# Completed on Wed Sep 2 16:25:54 2020
# Generated by iptables-save v1.6.1 on Wed Sep 2 16:25:54 2020
*nat
:PREROUTING ACCEPT [18:1766]
:INPUT ACCEPT [18:1766]
:OUTPUT ACCEPT [70:5183]
:POSTROUTING ACCEPT [70:5183]
-A POSTROUTING -s 192.168.0.0/24 -o enp2s0 -j MASQUERADE
COMMIT
# Completed on Wed Sep 2 16:25:54 2020
答案1
对于那些再次发现这个问题的人,我已经找到了原因,即使不是解决方案。我们的系统Docker配置正在向 IP 表添加规则,这些规则在某种程度上干扰了 NIC 路由功能。删除 Docker 安装后,问题中描述的配置将按预期工作!