我有一台低功耗双核赛扬机器,运行 Ubuntu 19.04,充当我的路由器。它还使用PiHole for DNS运行lxd
虚拟机。
这一切都运作良好,并且已经持续了几个月。Ubuntu 19.10 现在已经发布了,我在另一台机器上发现我一直在使用的配置,它具有在 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
设置下工作正常。
现在更迷茫了。:-?
作为调试的第一步,尝试捕获
ip route
使用 ifupdown 配置系统时的输出;然后禁用 ifupdown 并启用 netplan,重新启动并再次捕获输出,并比较结果。两种配置之间可见的一个区别是您对
eth0
接口的处理,在 ifupdown 下您已将其设置为“手动”配置,而在 netplan 下您将使用 dhcp 进行配置。这肯定会导致干扰您的连接的差异。路由器强迫我的手:昨天有东西损坏了(我不知道是怎么回事,我昨天根本没有对它做任何事情),几分钟后它就被锁定了。我没有重新安装 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
。最后一个问题是最棘手的,我不太确定它实际上是如何解决的(更新:见下文)。修复前两个后,我可以访问 Internet 上除HTTPS 站点之外的所有站点,如上所述。但这并不是所有的HTTPS 网站,因为 Facebook 仍然有效,而且我也能够访问
https://google.com
几次!所以这实际上不是 HTTPS 系统的问题。花了很多时间仔细研究我的iptables
设置,最终确定它没有任何问题。我偶然发现了一条评论,说这是 MTU 设置不正确的症状,花了一两个小时玩与它相关的各种事情(所有这些都进一步破坏了事情),然后才确定这不是问题所在。
最后偶然发现另一条评论说启用 IPv6 会导致看起来像这样的问题。
dhcp6
将行更改为no
,并添加一link-local: [ ]
两行。我不确定到底是什么伎俩,但突然之间一切又恢复了。无论如何,这是在我的路由器上工作的最终 NetPlan 文件
/etc/netplan/01-network-manager-all.yaml
:我发布这个是希望它能帮助遇到这种问题的其他人。也许我自己也一样,如果下次我需要重建这个路由器系统时遇到问题。;-)