我有一台低功率的双核赛扬机器,运行 Ubuntu 19.04,充当我的路由器。它还运行着一个lxd
虚拟机,PiHole用于 DNS。
几个月来,一切都运行良好。不过,Ubuntu 19.10 现已发布,我在另一台机器上发现,我一直使用的配置(在lxd
中设置了所需的网络桥接/etc/network/interfaces
)在 19.10 中不再起作用。我已成功将另一台具有类似桥接配置的机器移至 NetPlan,但我似乎无法弄清楚如何对路由器进行此操作。我希望这里有人可以告诉我我哪里出错了。
这是原始的并且当前可以使用的/etc/network/interfaces
文件:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
# The WAN interface.
auto ethwan
iface ethwan inet dhcp
dns-nameservers 208.67.222.222 208.67.220.220
# The (old) LAN interface.
iface eth0 inet manual
# The new LAN interface, on the new USB-to-Ethernet connection.
iface ethlan inet manual
# The *new* LAN interface.
auto br0
iface br0 inet static
address 192.168.1.1
netmask 255.255.255.0
dns-nameservers 208.67.222.222 208.67.220.220
bridge-ifaces ethlan
bridge-ports ethlan
up ifconfig ethlan up
/etc/netplan/01-network-manager-all.yaml
这是我在注释掉除上面两行以外的所有内容后尝试使用的内容lo
:
# Let NetworkManager manage all devices on this system
network:
version: 2
#renderer: NetworkManager
renderer: networkd
ethernets:
# eth0 isn't used, as the hardware isn't reliable
eth0:
match:
macaddress: f4:4d:30:67:0a:6c
dhcp4: yes
dhcp6: yes
set-name: eth0
ethlan:
match:
macaddress: 00:e0:4c:6a:03:3f
set-name: ethlan
dhcp4: no
dhcp6: no
ethwan:
match:
macaddress: 78:32:1b:a8:cc:1c
dhcp4: yes
dhcp6: yes
set-name: ethwan
bridges:
br0:
interfaces: [ethlan]
dhcp4: no
dhcp6: no
addresses: [192.168.1.1/24]
#gateway4: 192.168.1.1
#nameservers:
# addresses:
# - 192.168.1.11
名称服务器通过 提供dnsmasq
。
通过此设置,路由器机器能访问互联网没有问题——但lxd
虚拟机根本无法访问大多数网站(当我在虚拟sudo apt update
机上运行它时,它说它访问了http://security.ubuntu.com/ubuntu
,但似乎无法访问http://archive.ubuntu.com/ubuntu
),网络上其他地方的机器也有类似的问题(我无法访问 Google 或 DuckDuckGo,但我的妻子可以在她的 iPad 上访问 Facebook)。我怀疑它可以访问的网站是由于 DNS 缓存在某处造成的。
我尝试过gateway4
同时和分别取消注释该行和三个名称服务器行。网关行似乎完全阻止它工作(我不确定内部细节,但这似乎有道理);名称服务器行似乎没有任何效果。我也尝试过使用 NetworkManager 作为渲染器,这似乎也导致它完全不起作用。
有人能看出我哪里做错了吗,或者建议我做点什么来改正它?谢谢!
更新:
数据ip route
及工作/etc/network/interfaces
设置如下:
default via 45.74.106.33 dev ethwan
default dev eth0 scope link metric 1002 linkdown
default dev ethlan scope link metric 1003
default dev wlp2s0 scope link metric 1005 linkdown
45.74.106.32/27 dev ethwan proto kernel scope link src 45.74.106.51
169.254.0.0/16 dev eth0 proto kernel scope link src 169.254.5.39 linkdown
169.254.0.0/16 dev wlp2s0 proto kernel scope link src 169.254.8.207 linkdown
169.254.0.0/16 dev ethlan proto kernel scope link src 169.254.4.254
169.254.0.0/16 dev ethwan scope link metric 1000
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.1
相同的数据,设置如下netplan
:
default via 45.74.106.33 dev ethwan
default via 198.2.97.225 dev ethwan proto dhcp src 198.2.97.228 metric 100
default dev ethlan scope link metric 1003
default dev wlp2s0 scope link metric 1005 linkdown
45.74.106.32/27 dev ethwan proto kernel scope link src 45.74.106.51
169.254.0.0/16 dev wlp2s0 proto kernel scope link src 169.254.8.207 linkdown
169.254.0.0/16 dev ethlan proto kernel scope link src 169.254.4.254
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.1
198.2.97.224/27 dev ethwan proto kernel scope link src 198.2.97.228
198.2.97.225 dev ethwan proto dhcp scope link src 198.2.97.228 metric 100
我认为新198.2.97.225
地址是我尝试时 ISP 分配的附加地址。除了这一点以及行的重新排列之外,它对我来说看起来基本相同,但我对该命令的输出不太了解。
然而,在尝试的过程中,我发现了一个非常奇怪的现象。当我使用netplan
上述配置时,本地网络上的机器可以访问任何站点除了TLS/SSL 站点。curl -v http://google.com
返回 301 重定向数据,curl -v https://google.com
到达以下行* TLSv1.3 (OUT), TLS handshake, Client hello (1):
,然后它就停止我相信这可以解释为什么在这种配置下有些网站可以工作而其他网站却不能。
我以为这可能是一个iptables
问题,但在该设置下它运行良好/etc/network/interfaces
。
现在更加困惑了。:-?
答案1
作为调试的第一步,尝试捕获ip route
使用 ifupdown 配置系统时的输出;然后禁用 ifupdown 并启用 netplan,重新启动,再次捕获输出,并比较结果。
两种配置之间可见的一个区别是您对eth0
接口的处理,在 ifupdown 下您已将其设置为“手动”配置,而在 netplan 下您使用 dhcp 配置。这肯定会导致干扰您连接的差异。
答案2
路由器迫使我采取行动:昨天它出现了一些问题(我不确定是怎么回事,我昨天什么都没做),几分钟后它就锁定了。我没有重新安装 Ubuntu 19.04,而是决定咬紧牙关,安装新的 Ubuntu 19.10,找到问题的答案。我并不后悔,但这真是太痛苦了!
经过六个小时的研究和调试,发现存在几个问题。
第一个是最简单的:我需要在配置nameservers
中添加一个部分br0
。我不确定这对最终解决方案是否有必要,因为它曾经dnsmasq
处理过这个问题,但它似乎解决了一些问题。
第二个问题是/etc/network/iptables
不再自动读取。之前是由 完成的/etc/network/if-pre-up.d/iptables
,我认为该文件是我在最初设置防火墙时创建的。通过在根目录下添加一行crontab
:解决了这个问题@reboot /etc/network/if-pre-up.d/iptables
。
最后一个问题最难解决,我也不太清楚它是怎么解决的(更新:见下文)。解决了前两个问题后,我就可以访问互联网上的所有网站了除了HTTPS 网站,如上所述。但事实并非如此全部HTTPS 网站,因为 Facebook 仍然可用,我也能访问https://google.com
几次!所以这实际上不是 HTTPS 系统的问题。花了很多时间仔细检查我的iptables
设置,最终才确定它没有任何问题。
我偶然发现一条评论,说这是 MTU 设置不正确的症状,花了一两个小时研究与之相关的各种东西(所有这些都使事情变得更加糟糕),然后才决定这不是问题所在。
最后偶然发现另一条评论说启用 IPv6 可能会导致类似的问题。将行更改dhcp6
为no
,并添加一link-local: [ ]
两行。我不确定到底是什么起了作用,但突然间一切又恢复正常了。
更新,两天后:
今天早上,我出于无关的原因重启了路由器。突然,HTTPS 问题又出现了!再次登录路由器,
ifconfig
查看 IPv6 链路本地地址是否重新出现……br0
有,但ethwan
没有,所以我认为这不是问题所在。然后我想看看
ifconfig
提供的 MTU 值。我知道 MTU 在ethwan
工作时是 1500,因为我在一切开始正常工作时检查了它。但现在它被设置为 576!显然我遇到的 HTTPS 问题是都是因为 MTU 设置,有时会设置错误。在我切换到 NetPlan 之前从来没有遇到过这个问题,不知道现在为什么会这样。因为我知道正确的 MTU 值,所以我将其放入 NetPlan 配置文件中并运行
sudo netplan apply
。瞧,一切突然又开始正常工作了。很高兴终于明白了那里发生了什么。我对 IPv6 的解释不满意,似乎有些不对劲,因为重启后一切开始正常后如果这是答案,如果这有任何意义的话,他们就会这么做。
我已更新下面的配置以包含 MTU 更改。
无论如何,这是最终的 NetPlan 文件,/etc/netplan/01-network-manager-all.yaml
可以在我的路由器上运行:
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
#renderer: networkd
ethernets:
eth0:
match:
macaddress: f4:4d:30:67:0a:6c
dhcp4: yes
dhcp6: yes
set-name: eth0
ethlan:
match:
macaddress: 00:e0:4c:6a:03:3f
set-name: ethlan
ethwan:
match:
macaddress: 78:32:1b:a8:cc:1c
dhcp4: yes
dhcp6: no
link-local: [ ]
set-name: ethwan
mtu: 1500
bridges:
br0:
interfaces: [ethlan]
addresses: [192.168.1.1/24]
nameservers:
addresses: [208.67.222.222, 208.67.220.220]
link-local: [ ]
我发布这篇文章是希望它能帮助遇到此类问题的其他人。如果我下次需要重建此路由器系统时遇到麻烦,也许它也能帮助到我自己。;-)