我花了好几天的时间在这里用 dnsmasq 设置 DNS 和 DHCP,并用 netplan 来尝试新的方式。
WAN-router is on 192.168.0.1 - works fine
LAN-router (Ubuntu 18.04) received 192.168.0.205 on enp1s0 and is serving addresses on enp2s0; 192.168.1.1 - DHCP works fine, handing out 192.168.1.x addresses as it should. Can ping google.com
Client laptop is on 192.168.1.181 - Gets IP, can ping LAN-router, can ping IP addresses directly (such as 8.8.8.8) but traceroute and DNS does not work
这是我的 dnsmasq 配置:
bogus-priv
strict-order
filterwin2k
expand-hosts
domain=home
no-resolv
listen-address=127.0.0.1
listen-address=192.168.1.1
#DHCP range
dhcp-range=192.168.1.1,192.168.1.254,72h
dhcp-option=option:router,192.168.0.1
# Upstream name servers
server=192.168.0.1
server=8.8.4.4
server=8.8.8.8
dnsmasq 的状态,启动正常:
Nov 15 06:54:17 router systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Nov 15 06:54:17 router dnsmasq[2000]: dnsmasq: syntax check OK.
Nov 15 06:54:17 router dnsmasq[2030]: started, version 2.79 cachesize 150
Nov 15 06:54:17 router dnsmasq[2030]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify
Nov 15 06:54:17 router dnsmasq-dhcp[2030]: DHCP, IP range 192.168.1.1 -- 192.168.1.254, lease time 3d
Nov 15 06:54:17 router dnsmasq[2030]: using nameserver 8.8.8.8#53
Nov 15 06:54:17 router dnsmasq[2030]: using nameserver 8.8.4.4#53
Nov 15 06:54:17 router dnsmasq[2030]: using nameserver 192.168.0.1#53
Nov 15 06:54:17 router dnsmasq[2030]: read /etc/hosts - 7 addresses
Nov 15 06:54:17 router systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
ip地址显示:
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:e8:4c:68:61:52 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.205/24 brd 192.168.0.255 scope global dynamic enp1s0
valid_lft 1962sec preferred_lft 1962sec
inet6 fe80::2e8:4cff:fe68:6152/64 scope link
valid_lft forever preferred_lft forever
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:e8:4c:68:61:53 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global enp2s0
valid_lft forever preferred_lft forever
inet6 fe80::2e8:4cff:fe68:6153/64 scope link
valid_lft forever preferred_lft forever
netplan-yaml:
network:
renderer: networkd
ethernets:
enp1s0:
addresses: []
dhcp4: true
enp2s0:
addresses: [192.168.1.1/24]
gateway4: 192.168.0.1
dhcp4: false
nameservers:
search: [home]
addresses: [192.168.0.1,8.8.8.8,8.8.4.4]
version: 2
我确信我一路上搞混了。我能够通过 DNS 解析客户端笔记本电脑上的名称一段时间,但无法进行实际的数据传输,因此实际上无法真正连接到互联网。
这对我来说有点新,所以很感激任何指点。
编辑 -
拓扑 - 已更新:
Client (192.168.1.2) -> Unifi AP (192.168.1.71) -> Lan-Router [192.168.1.1 -> 192.168.0.205] -> WAN-router (192.168.0.1) -> Internet
随着我对 Netplan、dnsmasq 和路由/网络有了更多的了解,我了解到在 Netplan 配置中我应该只定义一个网关。我认为网关应该是显示出口的网关,因此我更新了配置,如下所示:
network:
renderer: networkd
ethernets:
enp1s0:
addresses: [192.168.0.205/24]
dhcp4: true
gateway4: 192.168.0.1
enp2s0:
addresses: [192.168.1.1/24]
dhcp4: false
nameservers:
search: [home]
addresses: [192.168.0.1,8.8.8.8,8.8.4.4]
version: 2
这种方法暂时有效。我甚至可以在客户端的浏览器中解析“router:xxxx”。
然后,在没有对 Lan-Router 进行任何更改的情况下,它停止工作了。这大概发生在它开始工作 30-60 分钟后。
客户端上的 Ping 可以解析 DNS,但无法接收任何数据包,这表明存在一些路由问题:
PING google.com (172.217.20.78): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
^C
--- google.com ping statistics ---
3 packets transmitted, 0 packets received, 100.0% packet loss
客户端上的 Traceroute 没有超出 LAN 路由器:
traceroute to google.com (172.217.20.78), 64 hops max, 52 byte packets
1 * router (192.168.1.1) 1.391 ms 2.486 ms
2 *^C
Lan-Router 上的 IP 路由:
default via 192.168.0.1 dev enp1s0 proto static
default via 192.168.0.1 dev enp1s0 proto dhcp src 192.168.0.205 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.0.0/24 dev enp1s0 proto kernel scope link src 192.168.0.205
192.168.0.1 dev enp1s0 proto dhcp scope link src 192.168.0.205 metric 100
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.1
LAN路由器上的route -n:
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 enp1s0
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 enp1s0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp1s0
192.168.0.1 0.0.0.0 255.255.255.255 UH 100 0 0 enp1s0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enp2s0
在那个时间段内可能发生过一次重新开始,但我不记得那是否是导致下降的具体原因。
如果能提供任何关于如何排除故障的指示,我们将不胜感激。
编辑
暂时解决了。是缺少路由语句(一定是重启后)
我添加了这个:phil@router:~$ sudo iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
客户端已接入互联网。接下来我将使此转发规则永久生效。从现在起很可能一切正常……让我们拭目以待!
答案1
根据您的问题陈述,您有类似这样的情况,是吗?
Client <---> LAN-Router <---> WAN-Router <---> Internet
192.168.1.181 192.168.1.1 192.168.0.205 192.168.0.1
客户端的网关IP配置为192.168.0.1,也就是WAN路由器的IP,客户端怎么知道能不能到192.168.0.1呢?
请记住,网关地址的定义是让计算机知道如何将流量发送到下一台计算机或路由器,即下一跳。如果需要,则需要客户端可以访问的某个地址,通常与客户端位于同一子网中。因此,如果您将客户端的网关更改为 192.168.1.1,那就没问题了。
希望这可以帮助。