双网卡配置为带 NAT 的路由器

双网卡配置为带 NAT 的路由器

我有一台运行 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 安装后,问题中描述的配置将按预期工作!

相关内容