今天,我的互联网调制解调器和路由器被换成了新设备。我家里的其他一切都正常,除了我的 Ubuntu Linux 20.04 LTS 服务器。我可以远程访问它,它可以看到我的本地网络,但无法访问路由器以外的互联网上的任何内容。
这是错误。执行时,docker-compose pull
每次尝试提取图像时都会出现此错误
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Get https://lscr.io/v2/: dial tcp 35.155.221.103:443: connect: no route to host
我以前怀疑是 DNS,但评论中的 @steeldriver 指出服务器实际上似乎能够解析主机名。现在我怀疑这可能是与网关相关的网络配置。
值得注意的是,新路由器有一个新的网关地址。它以前是 192.168.1.1,但现在是 192.168.1.254。我尝试弄乱 cloud-init 配置文件。出于某种原因,cloud-init 中的 gateway4 条目是 192.168.1.0,即使这不是网关地址。我将其更改为 192.168.1.254 并重新启动机器。但是,现在我甚至无法再远程访问机器。我现在认为这可能是网络配置。有没有办法对 cloud-init 进行完全出厂重置?
以下是 cloud init yaml 文件。我必须从屏幕截图中输入此内容,因此请原谅任何格式错误,但内容是准确的。
network:
ethernets:
eno1:
addresses:
- 192.168.1.130/24
dhcp4: false
gateway4: 192.168.1.0
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
version: 2
我尝试将网关 4 更改为 192.168.1.254 并重新启动机器,但重新启动后我无法再远程访问机器。请指教
答案1
我已经解决了这个问题!
根本原因
我从 ISP 那里得到了一个新路由器,它带有不同的网关默认 IP。之前的路由器的网关 IP 是 192.168.1.1,而新路由器的网关 IP 是 192.168.1.254。服务器的网络配置将网关指定为 192.168.1.1,但该网关已不存在。因此,流量无法通过新路由器流出。我家里的其他设备运行正常,因为它们使用动态 DHCP 分配,而服务器没有。
只有当根本原因相同时,以下解决方案才对您有用!
解决方案
找到您的网络配置并将网关地址更改为您的新网关地址。对我来说,它是在/etc/cloud/cloud.cfg.d/50-curtin-networking.cfg
。对于其他人,它可能在/etc/netplan/50-cloud-init.yaml
。问题中上面发布的配置是一种很好的格式,它只需要正确的值。确保接口、地址和网关都正确。如果这不起作用,也请尝试运行ip route add default via 192.168.1.254 dev eno0
。将 IP 替换为您的网关 IP,并将最后一个值替换为您的互联网接口。
一路上的问题
一路上我遇到了一些干扰因素,退了一步又回到原点,最终解决了问题。
一开始我以为是 DNS 的问题,所以我对 DNS 做了不少调整。直到一位评论者指出,我的服务器似乎曾是解析主机名!所以我开始摆弄云配置文件。我对云配置进行了更改,只更改了网关,然后重新启动了机器。我不记得具体运行了哪些命令,所以我无法确切地警告某些事情。但是,我知道重新启动后,我无法再远程访问该盒子。使用本地终端,我能够发现云配置文件中的设备名称是enp1s0
正确ip address
的接口eno1
,因此云配置更改中断了机器的所有进出流量。纠正这个问题让我回到原点,远程访问盒子。这意味着我能够继续从我舒适的工作站进行故障排除,并且机器至少能够再次连接到本地网络。
然后,我专注于网络问题。运行ip route
显示没有默认路由。默认路由看起来像default via 192.168.1.254 dev eno1
。我尝试使用云配置重新启动几次,但没有任何效果。为了确保是云配置未能设置默认路由,我看到了这个问题
https://serverfault.com/questions/877880/how-can-i-add-a-default-gateway-with-the-ip-command-not-the-route-command
并运行ip route add default via 192.168.1.254 dev eno0
。此方法有效,并且重启后依然有效。