客户端(Ubuntu 20.04)无法访问互联网,但路由器可以(Debian 10.5)

客户端(Ubuntu 20.04)无法访问互联网,但路由器可以(Debian 10.5)

我对此完全陌生,正在为一个实践实验室设置路由器和客户端。客户端可以 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”。这不会影响操作系统的当前状态,因此您需要在第一次执行上述命令之一。
  • 从路由器的 enp0s8 配置中删除“网关”条目。我不知道这是否有害处,但路由器作为自己的网关是没有意义的
  • 正如其他人指出的那样,您似乎已将客户端的 DNS 服务器设置为路由器,但(可能)路由器上没有运行 DNS 服务器。从客户端的名称服务器列表中删除“10.0.20.15”条目。
  • 仅供参考,它没有什么坏处,但是假设您的默认策略是“ACCEPT”,那么 iptables 规则中的“-A FORWARD”行是不必要的。

假设您的路由器可以访问互联网,这就可以开始工作了。

相关内容