我无法从本地网络连接到 Ubuntu 服务器,但可以从外部连接

我无法从本地网络连接到 Ubuntu 服务器,但可以从外部连接

这是一个很奇怪的问题,一段时间以来,我一直为此而抓狂。我就是想不通。

我在 Dell PowerEdge-r710 服务器上运行 Ubuntu 22.04(包含所有最新补丁)。它在各种端口上托管各种服务。许多服务在 Kubernetes 下运行,有些则直接在主机下运行。它位于 Verizon 路由器后面的家用局域网上。我已使用路由器上的端口转发将所有感兴趣的端口路由到机器,一切运行正常。

当我尝试从内部网络访问这些端口时,它不起作用。以前它可以工作,但现在不行了。

以下是一些示例案例:

  • 示例 1,本机服务。我在家里或外面都可以正常使用。但是当我尝试从屋内连接时,它无法连接。除非我从服务器本身的命令行进行连接。ssh -p 8022 [email protected]ssh -p 8022 [email protected]

  • 示例 2,Kubernetes 托管的 Web 服务器。我可以curl http://publicname.com:8181正常使用,但curl http://192.168.1.173:8181无法工作。从服务器的 shell 工作也是如此。

  • 示例 3,与众不同:ping publicname.com工作正常,但也是如此ping 192.168.1.173。O_o

我在家里的多个机器上尝试过这个。我在 Windows 机器和 Mac 机器上都试过。都是一样的。所以我假设它不依赖于工作站。

我尝试使用本地名称,但这里我仅使用内部 IP 地址,以将 DNS 排除在外。当两个服务器都插入路由器下游的交换机时,我尝试过。我重新启动了路由器。我通常不会对路由器进行太多设置(端口转发除外),并且至少一年没有对其进行固件升级。所以我很确定这不是路由器问题。

我启用和禁用了 UFW,但似乎没有影响。在关闭 UFW 的情况下,我尝试添加显式访问权限,例如8022

*A INPUT -p tcp -m tcp --dport 8022 -j ACCEPT*

没有帮助。

iptables(和)中还有很多其他 UFW、Docker 和 Kubernetes 规则,iptables-legacy如果有用的话我可以转储它们。

以下是转储自ip -4 route list

default via 192.168.1.1 dev eno4 proto static metric
100  blackhole 10.1.23.128/26 proto 80 
10.1.23.136 dev cali83503037a1d scope link 
10.1.23.137 dev cali94b8c5e0ec2 scope link 
10.1.23.141 dev caliebd7497b285 scope link 
10.1.23.142 dev cali224b6f89d2e scope link 
10.1.23.143 dev calia147e44c90e scope link 
10.1.23.146 dev caliebea71cd4c0 scope link 
10.1.23.147 dev calief22f96cfc6 scope link 
10.1.23.149 dev calif356e5d735e scope link 
10.1.23.154 dev cali9a9cf33aad8 scope link 
10.1.23.155 dev cali0ce1e6d1dc6 scope link 
10.1.23.156 dev cali5a5d94e5703 scope link 
10.1.23.159 dev calib51c35c69e3 scope link 
10.1.23.160 dev cali05a64ae21b6 scope link 
10.1.23.174 dev cali6d73584524e scope link 
10.1.23.179 dev cali3df919b30be scope link 
10.1.23.181 dev cali6eba53f48ff scope link 
169.254.0.0/16 dev eno4 scope link metric 1000 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.1.1 dev eno4 proto static scope link metric 100

以下是 IP 地址的转储:

$ ip addr show dev eno4
5: eno4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 84:2b:2b:61:b1:96 brd ff:ff:ff:ff:ff:ff
    altname enp2s0f1
    inet 192.168.1.173/32 scope global noprefixroute eno4
       valid_lft forever preferred_lft forever
    inet6 fe80::862b:2bff:fe61:b196/64 scope link 
       valid_lft forever preferred_lft forever

我已经忍受这个问题大约一个月了,一直在尝试解决这个问题。对于 ssh,我可以处理。但我添加了一个 SAMBA 驱动器用于备份,我真的不想将它暴露在互联网上,这样我就可以从我的 LAN 访问它。

这一切对任何人来说都有意义吗?

答案1

Raj 的评论给了我一个想法。似乎您已经以某种方式用子网定义了本地 IP 地址/32,如输出所示ip addr show dev eno4

5: eno4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 84:2b:2b:61:b1:96 brd ff:ff:ff:ff:ff:ff
    altname enp2s0f1
    inet 192.168.1.173/32 scope global noprefixroute eno4
       valid_lft forever preferred_lft forever
    inet6 fe80::862b:2bff:fe61:b196/64 scope link 
       valid_lft forever preferred_lft forever

这意味着网络只有一个 IPv4 地址,并且所有流量将直接在具有该 IPv4 地址的设备和默认网关之间传输(看这里),再次支持Raj的评论。

因此,您应该在网络配置中修复此问题。大多数家庭网络使用/24子网(255.255.255.0子网掩码)来允许将第四个八位字节用作 IP 地址(在该范围内提供 254 个可能的 IP 地址)。

由于 DHCP 服务器在子网范围内分配 IP 地址毫无意义/32,因此我认为这是 Netplan 中的错误配置(此处假设您已为服务器设置了静态 IP)。因此,请将静态 IP 的子网掩码设置为 ,255.255.255.0而不是255.255.255.255

相关内容