我对此完全陌生,正在为一个实践实验室设置路由器和客户端。客户端可以 ping 通路由器,路由器也可以 ping 通客户端。路由器可以访问互联网,但客户端不能。我不知道这是为什么,有人能帮忙吗?
这是我的所有设置。
客户端 /etc/netplan/01-network-manager-all.yaml
network:
version: 3
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses:
- 10.0.20.21/24
gateway4: 10.0.20.1
nameservers:
addresses: [10.0.20.15, 8.8.8.8]
路由器:/etc/network/interfaces
source /etc/nework/interfaces.d/*
auto lo
iface lo inet loopback
#NAT Network
allow-hotplug enp0s3
iface enp0s3 inet static
address 10.0.2.15
netmask 255.255.255.0
gateway 10.0.2.2
dns-nameserver 10.0.0.1
dns-nameserver 8.8.8.8
pre-up iptables-restore < /etc/iptables.rules
#Internal Network
allow-hotplug enp0s8
iface enp0se8 static
address 10.0.20.15
netmask 255.255.255.0
gateway 10.0.20.15
network 10.0.20.0
broadcast 10.0.20.255
Iptables 规则
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
iptables -A FORWARD -i enp0s3 -o enp0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
答案1
存在几个问题领域:
- 如果你希望客户端通过路由器进行路由,则必须将客户端的网关设置为路由器的 IP 地址
- 就您而言,这意味着客户端的网关应该是 10.0.20.15,而不是 10.0.20.1
- 您的路由器需要启用 IP 转发,有几种方法可以做到这一点:
- 运行(以 root 身份运行)
echo 1 > /proc/sys/net/ipv4/ip_forward
请注意,此操作在系统重启后将不再生效 - 运行(以 root 身份运行)
sysctl -w net.ipv4.ip_forward=1
请注意,此操作在系统重启后将不再生效 - 如果您希望它在重启后仍然有效,请编辑 /etc/sysctl.conf 并确保“net.ipv4.ip_forward”值被取消注释并设置为“1”。这不会影响操作系统的当前状态,因此您需要在第一次执行上述命令之一。
- 运行(以 root 身份运行)
- 从路由器的 enp0s8 配置中删除“网关”条目。我不知道这是否有害处,但路由器作为自己的网关是没有意义的
- 正如其他人指出的那样,您似乎已将客户端的 DNS 服务器设置为路由器,但(可能)路由器上没有运行 DNS 服务器。从客户端的名称服务器列表中删除“10.0.20.15”条目。
- 仅供参考,它没有什么坏处,但是假设您的默认策略是“ACCEPT”,那么 iptables 规则中的“-A FORWARD”行是不必要的。
假设您的路由器可以访问互联网,这就可以开始工作了。