DIY 路由器不回复大多数请求

DIY 路由器不回复大多数请求

我正在尝试在装有 Ubuntu Server 18.04 的机器上设置路由器。该服务器主板上有一块网卡,还有两块 PCI 网卡,每块网卡有 4 个接口。我在同一台机器上设置了 DHCP 服务器和 DNS 服务器。我使用了教程。我的网络设置如下:

网络设置

当我ping 192.168.1.1从 192.168.1.2 执行时,一切正常,但是当我尝试使用 ping google 的 ip 时,ping 172.217.17.36我没有收到任何回复。nslookup google.com 192.168.1.1也超时了。但是当我nslookup google.com 192.168.0.113从笔记本电脑执行时,我确实得到了预期的回复。在 ubuntu 路由器上执行ping google.com也很好。

我的 netplan 设置如下:

network:
    ethernets:
        eno1:
            dhcp4: true
        enp9s0:
            addresses:
            - 192.168.1.1/24
            dhcp4: false
            nameservers:
                addresses:
                - 127.0.0.1
                search: []
        enp10s0:
            addresses:
            - 192.168.1.1/24
            dhcp4: false
            nameservers:
                addresses:
                - 127.0.0.1
                search: []
        enp11s0:
            addresses:
            - 192.168.1.1/24
            dhcp4: false
            nameservers:
                addresses:
                - 127.0.0.1
                search: []

...same for other interfaces...
    version: 2

我的 ip 表设置如下:

iptables -P INPUT  ACCEPT
iptables -P FORWARD  ACCEPT
iptables -P OUTPUT ACCEPT

iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE

我的dhcp.conf如下:

option domain-name "example.com";
option domain-name-servers 127.0.0.1;

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;

authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
     range 192.168.1.2 192.168.1.254;
     option subnet-mask 255.255.255.0;
     option routers 192.168.1.1;
     option broadcast-address 192.168.1.255;
}

我正在使用 pi-hole 作为我的 DNS 服务器。

ifconfig在 ubuntu 路由器上结果是:

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.113  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::12c3:7bff:fe6c:c81b  prefixlen 64  scopeid 0x20<link>
        inet6 2a02:1812:d38:c300:274d:5b5:ce56:bdf6  prefixlen 64  scopeid 0x0<global>
        inet6 2a02:1812:d38:c300:12c3:7bff:fe6c:c81b  prefixlen 64  scopeid 0x0<global>
        ether 10:c3:7b:6c:c8:1b  txqueuelen 1000  (Ethernet)
        RX packets 13961  bytes 1287100 (1.2 MB)
        RX errors 0  dropped 9010  overruns 0  frame 0
        TX packets 2150  bytes 372856 (372.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xdfd00000-dfd20000

enp10s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2e0:4cff:fe68:873e  prefixlen 64  scopeid 0x20<link>
        ether 00:e0:4c:68:87:3e  txqueuelen 1000  (Ethernet)
        RX packets 1041  bytes 233462 (233.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1427  bytes 460072 (460.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp11s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:e0:4c:68:87:3f  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

...

enp9s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:e0:4c:68:87:3d  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 8029  bytes 524899 (524.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8029  bytes 524899 (524.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

当外部 IP 地址来自 192.168.1.2 时,如何弄清楚为什么我的路由器没有响应 ping 和 dns 请求?

如果您希望我发布更多信息,请告诉我。

答案1

我发现此设置中存在多个不相关的问题:

  1. 无法从 ping 外部 IP 192.168.1.2。您应该检查以下事项:

    1. 是否192.168.1.2已配置适当的路由?检查 的输出ip route是否包含带有网关的默认路由192.168.1.1(如 中配置的dhcp.conf
    2. 是否192.168.1.1配置了适当的路由?同样,请检查ip route此处。但由于您可以google.com从那里 ping 通,因此情况应该如此。
    3. ip_forward路由器上是否启用了此功能?这是我的猜测。
      • 检查输出cat /proc/sys/net/ipv4/ip_forward
      • echo 1 > /proc/sys/net/ipv4/ip_forward启用
  2. 无法解析 DNS 请求:

在你的dhcp.conf你有

option domain-name-servers 127.0.0.1;

但这应该是

option domain-name-servers 192.168.1.1;

否则,桌面将尝试使用127.0.0.1其本身作为 DNS 服务器。

这很可能是这里的问题。此外,您可以测试以解析明确指定 DNS 服务器的 DNS 请求,执行

host example.org 192.168.1.1

在台式机和路由器上。还要检查两个主机上哪个 DNS 服务器通过 DHCP 有效配置: * 在台式机上,现在可能是127.0.0.1,见上文,但应该是192.168.1.1 * 在路由器上,这可能是192.168.0.1上游路由器,通过 DHCP 配置。因此:即使您可以在路由器上成功解析 DNS 请求 - 作为客户- 这并不意味着 DNS 守护进程 - 作为服务器- 已配置并正常工作。

  1. 所有接口上都有相同的子网:这个问题不会困扰你然而但当您将多根电缆连接到路由器时,很可能会出现问题。

目前,您已192.168.1.1/24在所有配置为第 3 层接口的下游接口上进行了配置。如果其中多个接口处于活动状态,则操作系统将难以决定将数据包路由到哪个接口192.168.1.0/24

相反,您应该将所有物理接口连接到虚拟桥接设备,并为该桥接设备分配 IP 地址。这是物理接口作为相互连接的 2 层交换机接口。

相关内容