这是一个很奇怪的问题,一段时间以来,我一直为此而抓狂。我就是想不通。
我在 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
。