我正在运行带有 2 个 NIC 的 Ubuntu 服务器 v22.04 - 一个面向 ISP,一个面向本地 LAN,旨在作为本地 LAN 的媒体服务器以及 LAN 与 WAN 之间的接口。
NIC:
- enp0s31f6 - 使用 192.168.1.65 从 ISP 设备进行 DHCP,然后传出到 WAN
- enp3s0 - 静态 IP 192.168.126.10 和 192.168.126.x 网络上其余 LAN 网络的 DHCP 服务器。
目标是所有设备都获得 192.168.126.x 地址,然后流量流向服务器 192.168.126.10/192.168.1.65,然后再流向互联网。
服务器可以与整个互联网通信,可以 ping 静态 LAN IP 192.168.126.10(本身),但无法 ping 192.168.126.x 网络上的工作站
已获取 DHCP 的 192.168.126.x 地址的工作站可以 ping 本地网络服务器地址 192.168.126.10,但无法 ping ISP 地址 192.168.1.65。这些工作站无法访问互联网。
Netplan 配置:
network:
version: 2
ethernets:
enp0s31f6:
dhcp4: true
nameservers:
addresses: [4.2.2.1,8.8.4.4]
routes:
- to: 192.168.1.0/24
via: 192.168.1.1
routing-policy:
- from: 192.168.1.0/24
enps0:
addresses: [192.168.126.10/32]
dhcp4: no
nameservers:
addresses: [4.2.2.1,8.8.4.4]
routes:
- to: 192.168.126.0/24
via: 192.168.126.10
- to: 192.168.1.0/24
via: 192.168.126.10
routing-policy:
- from: 192.168.126.0/24
dhcpd配置文件
authoritative;
server-identifier 192.168.126.10;
option domain-name "whatever.local";
shared-network dhcp-server
{
subnet 192.168.126.0 netmask 255.255.255.0
{
option domain-name-servers 1.1.1.1, 8.8.4.4;
option subnet-mask 255.255.255.0;
option broadcast-address 192.16.126.255;
option routers 192.168.126.10;
option domain-name "whatever.local";
default-lease-time 14400;
max-lease-time 20000;
range 192.168.216.100 192.168.126.250;
}
}
DHCP 配置是从已经运行的旧 CentOS 机器复制而来的。
工作站 ipconfig /所有结果
Connection specific DNS suffix : whatever.local
DHCP Enabled ................. : Yes
Autoconfiguration Enabled .... : Yes
IPv4 Address ................. : 192.168.126.127(Preferred)
Subnet Mask .................. : 255.255.255.0
Default Gateway .............. : 192.168.126.10
DHCP Server .................. : 192.168.126.10
DNS Server ................... : 1.1.1.1
8.8.4.4
DHCP 似乎可以正常工作,但我似乎无法让工作站流量到达 WAN 地址。工作站无法 ping Google.com,但可以访问任何 192.168.126.10 服务(ssh、httpd 等)
Netplan 对我来说完全是新东西,我也不是网络专家,也不相信这是最好的设置。但我一直在尝试模仿以前在 CentOS 中运行的方式。
ufw 已禁用(目前)
/proc/sys/et/ipv4/ip_forward 为 1
sysctl.conf 有 net.ipv4.ip_forward=1
我没有任何 iptables 规则。
有人能帮助我让流量在这两个 NIC 之间流动吗,或者为我指明不同的方向来解决我遇到的本地 LAN 到服务器到 WAN 的问题?
提前致谢!
答案1
您的静态 IP 上的网络掩码错误。您应该使用网络掩码 /24,而不是网络掩码 /32(仅限主机)。
一旦您纠正了这个问题,您的所有routes
和routing-policy
条目都是不必要的,应该被删除。
要使路由器后面的机器能够访问互联网,以下两个条件之一必须满足:要么 ISP 设备必须有一个条目,告诉它将 192.168.126.x 网络的所有流量路由到 192.168.1.65,要么您在路由器上启用了 NAT。Netplan 目前不支持 NAT 配置,您需要使用静态iptables
/nftables
命令或通过 Ubuntu 中提供的各种防火墙前端工具之一来执行此操作。
答案2
我的问题最终出在 iptables 规则上,而不是 netplan 或路由上。一条简单的 1 行规则解决了问题。
iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE
但是,当添加 Google 搜索时看到的其他标准规则时,流量完全停止流动。不要一次剪切和粘贴多个规则。