Iptables

DIY路由器沒有回復大多數請求

  • September 14, 2019

我正在嘗試在具有 Ubuntu 伺服器 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從筆記型電腦執行時,我確實得到了預期的答复。ping google.com在 ubuntu 路由器上執行也可以正常工作。

我的網路計劃設置如下:

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;
}

我正在為我的 DNS 伺服器使用 pi-hole。

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 時,我如何才能弄清楚為什麼我的路由器沒有回復對外部 IP 的 ping 和 dns 請求?

如果您希望我發布更多資訊,請告訴我。

我在此設置中看到多個不相關的問題:

  1. 無法從 ping 外部 IP 192.168.1.2。你應該檢查的事情:

  2. 是否192.168.1.2配置了適當的路由?檢查輸出ip route是否包含預設路由,192.168.1.1作為網關(如中配置dhcp.conf

  3. 是否192.168.1.1配置了適當的路由?再次,請檢查ip route這裡。但是,既然您可以google.com從那裡 ping 通,應該就是這種情況。

  4. ip_forward在路由器上啟用了嗎?這是我的猜測。

    • 檢查輸出cat /proc/sys/net/ipv4/ip_forward
    • echo 1 > /proc/sys/net/ipv4/ip_forward啟用
  5. 無法解析 DNS 請求:

在你的dhcp.conf你有

option domain-name-servers 127.0.0.1;

但這應該是

option domain-name-servers 192.168.1.1;

否則桌面會嘗試使用127.0.0.1ie 作為 DNS 伺服器。

這很可能是這裡的問題。此外,您可以測試解析明確指定 DNS 伺服器的 DNS 請求,執行

host example.org 192.168.1.1

在桌面和路由器上。還要檢查兩個主機上通過 DHCP 有效配置的 DNS 伺服器: * 在桌面上這可能是現在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 層交換機介面。

引用自:https://serverfault.com/questions/984239