我有一台双宿主 Ubuntu 22.04 LTS 服务器,其中一个 NIC 位于 DMZ,另一个位于 LAN。我一直在努力解决 netplan 配置问题,由于网关配置和路由最近发生了变化,我的搜索发现了许多关于如何实现所需配置的混合建议。我已阅读 netplan 文档:https://netplan.readthedocs.io/en/latest/netplan-tutorial/
目前我有以下设置:
$ ip route:
default via 192.168.2.2 dev eth0 proto static metric 100 onlink
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
172.18.0.0/16 dev br-e9fa8283d45d proto kernel scope link src 172.18.0.1
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.39
192.168.14.0/24 dev eth1 proto kernel scope link src 192.168.14.2
当前 netplan .yaml 配置文件:
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.2.39/24
dhcp4: no
routes:
- to: 0.0.0.0/0
via: 192.168.2.2
metric: 100
on-link: true
nameservers:
addresses:
- 192.168.2.29
- 192.168.2.10
eth1:
addresses:
- 192.168.14.2/24
dhcp4: no
routing-policy:
- from: 192.168.14.0/24
table: 199
routes:
- to: 0.0.0.0/0
via: 192.168.14.1
metric: 100
table: 199
$ ip rule list
0: from all lookup local
32765: from 192.168.14.0/24 lookup DMZ proto static
32766: from all lookup main
32767: from all lookup default
当前 rt_table:
xxx@xxx:/etc/iproute2$ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
199 DMZ
xxx@xxx:/etc/iproute2$ ip -d route show table 199
unicast default via 192.168.14.1 dev eth1 proto static scope global metric 100
当我尝试用以下内容替换表 199 中的路由时:
sudo ip r 替换默认通过 192.168.14.1 dev eth1 proto static scope link metric 100 onlink table 199
我收到以下错误:“错误:Nexthop 的范围无效。”
我想要实现的目标:
1. 允许互联网访问和本地网络通过 LAN 连接出去。
2. 允许从我们的 NAT 公共 IP 到 DMZ 接口的入站流量:192.168.14.2 到达我们的 Web 应用程序并在原始 NIC(DMZ)上返回。
目前,使用此配置我可以访问互联网,但我的 Web 应用程序超时。我已进行数据包跟踪,以确定标志 [S] 的流量正在进入 Ubuntu 服务器,但没有回复返回。
我发现,如果我将默认路由(默认通过 192.168.2.2 dev eth0 proto static metric 100 onlink)替换为默认通过 192.168.14.1 dev eth1 proto static metric 100 onlink,那么我的 Web 应用程序就可以正常工作,而且我可以看到返回流量,但是我的服务器无法访问互联网,因为我需要该流量(更新等)通过 LAN 接口出去。
请提供一些关于我需要什么样的 netplan 配置才能允许双 NIC 工作并在重启时继续运行的指导。
预先感谢您的任何帮助。
[编辑:1] 谢谢 - 我已经通读了 netplan.io 并尝试了不同的配置,但都无济于事。如果可能的话,我希望有人能使用现代版本的 netplan 成功做到这一点,因为我们已经花了 2 周的时间研究这个问题,问题发布在其他两个论坛上,但并没有得到解决,因为人们推荐的是弃用的选项。我删除了“on-link: true”,但这并没有改变任何行为。
[编辑:2] 我的内部访问站点 192.168.2.39:8444 在上述配置下运行良好。但是,我无法从 DMZ 192.168.14.2:443 访问其他面向公众的站点。我可以使用路由表或主表更改默认路由:默认通过 192.168.2.2 dev eth0 proto static metric 100 onlink 到默认通过 192.168.14.1 dev eth1 proto static metric 100 onlink adn 然后我的公共站点运行良好,但我无法访问我的内部应用程序。这似乎是 Windows 上很容易解决的问题,但我对 Linux 中的路由配置并不熟练。
[编辑:3] 我使用 tcpdump 捕获了数据包,可以看到公共流量只有一方与 进行对话Flag [S]
,但没有通过 DMZ 的返回流量,使用以下命令:sudo tcpdump -i eth1 -n port 443 -S -vv
。我可以使用以下命令看到尝试从 eth0 发出的回复sudo tcpdump -i eth0 -n port 443 -S -vv
sudo tcpdump -i eth1 -n port 443 -S -vv
18:46:03.273544 IP (tos 0x0, ttl 47, id 62306, offset 0, flags [none], proto TCP (6), length 60)
xxx.xx.xxx.xx.60921 > 192.168.14.2.443: Flags [S], cksum 0x0b11 (correct), seq 3026599530, win 65535, options [mss 1460,nop,wscale 9,sackOK,TS val 178557874 ecr 0], length 0
sudo tcpdump -i eth0 -n port 443 -S -vv
18:46:51.177103 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto TCP (6), length 60)
192.168.14.2.443 > xxx.xx.xxx.xx.18874: Flags [S.], cksum 0xbc3f (incorrect -> 0x7356), seq 78744143, ack 2652949040, win 65160, options [mss 1460,sackOK,TS val 1512654855 ecr 178596451,nop,wscale 7], length 0
[编辑:4] 这可能与我们有两个需要在不同的物理网卡上响应的 docker 容器有关吗?DMZ 容器需要允许并响应 eth1 上的端口 80/443。LAN 容器需要响应 eth0 上的端口 8443 并访问互联网进行更新。我想知道 docker 网络是否需要注意。这是当前路由 -e:
$ sudo route -e
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default _gateway 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-e9fa8283d45d
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.14.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
看起来所有 docker 容器都使用 br-e9fa8283d45d,并且它是默认网关 0.0.0.0,而该网关又指向 eth0。这是否会导致 eth1 上的传入请求在回复时被路由到 eth0?
谢谢-
答案1
请参阅下面的示例并尝试实现您也可以查看这篇文章 https://technokona.com/how-to-add-static-routes-in-ubuntu-with-netplan/
network:
ethernets:
eth0:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1 #Your default gateway to the internet
nameservers:
addresses:
- 8.8.8.8
eth1:
addresses:
- 10.1.1.130/26
routes:
- to: 10.1.2.100 # Your We ABB IP address
via: 10.1.1.129 #Gateway to be used by Ubuntu to WebAPP
version: 2
答案2
在这种情况下,您可能需要启用指向 Web 应用程序的静态路由。默认网关应始终指向互联网网关,但对于 LAN 上的特定 Web 应用程序,您需要启用静态路由,指定实际的 Web 应用程序 IP 地址