目前我连接到的网络的子网掩码为 169.254.0.0,网关为 169.254.20.1。
从 Windows 机器上,我可以访问该网络上的 Internet 和 LAN。
但是每当我从 Linux 机器连接到该网络时,我都无法访问互联网,而只能访问 LAN。
在 Wireshark 捕获中,我看到所有 IP 数据包,在 LAN 之外的源 IP 都设置为0.0.0.0
,我相信这就是我没有收到任何回复的原因。
我用的是 kali。
有人能告诉我什么地方出了问题吗?
答案1
无论是谁设置了这家旅馆的网络,他都犯了一个错误,使用了RFC 3927 IPv4 链路本地子网 (169.254.0.0/16),它应该使用RFC 1918 私有子网(192.168.0.0/16、172.16.0.0/12、10.0.0.0/8)作为 NAT 私有子网。
因此,一些客户端遇到此配置问题也就不足为奇了。您可以尝试静态配置 Linux 机器的地址,地址范围为 169.254.0.[1-255] 或 169.254.255.[0-254],子网掩码仍为 /16(255.255.0.0)。子网中的这两个范围通常是在您确实需要在 IPv4 Link-Local 子网上静态配置某些内容时保留的。将其中一个已知 NAT 网关路由器(例如 169.254.10.1)静态配置为您的默认网关。
我不保证这个建议一定有效。为了大家的利益,你最好帮助这家旅馆配置他们的网络,使其更好地符合相关标准。
答案2
概括
您应该检查网络接口的 IP 地址范围。如果是link
,则您的非本地传出数据包的源 IP 地址将被替换为0.0.0.0
。如果是global
,您将照常访问互联网。
ip address show
您可以在命令输出的网络接口部分中找到 IP 地址范围。
要更改范围,您可以使用ip address del
删除主机的 IP 地址,然后使用ip address add
正确的范围重新添加它。如果这样做,默认网关将从路由表中删除。因此,您应该手动添加它。
就这样。完成上述步骤后,互联网应该就可以正常工作了。
例子
下面是一个例子(一些不相关的输出被截断,其他一些被(不)缩进):
# ip addr
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:d1:09:56 brd ff:ff:ff:ff:ff:ff
inet 169.254.55.3/16 brd 169.254.255.255 scope link dynamic ens33
valid_lft 1596sec preferred_lft 1596sec
# ip addr del 169.254.55.3/16 dev ens33
# ip addr add 169.254.55.3/16 dev ens33 scope global
# ip addr
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:d1:09:56 brd ff:ff:ff:ff:ff:ff
inet 169.254.55.3/16 scope global ens33
valid_lft forever preferred_lft forever
# ip route add default via 169.254.0.34 dev ens33
# ip route
default via 169.254.0.34 dev ens33
169.254.0.0/16 dev ens33 proto kernel scope link src 169.254.55.3
在 Fedora 23 和 Centos 7.2 Live CD 上测试。
笔记
- 此解决方案在使用静态地址时存在重大缺陷。它与宿舍的 LAN 和 DHCP 不太匹配。
- 我很确定在某处有一行简单的配置行可以指示系统给出作用域 全局到链路本地地址 (169.254.0.0/16)。但我还没有找到。如果你找到了,请告诉我。
- 请注意,一些旧的和刚刚成熟的发行版没有这个问题。例如,Fedora 12 和新的 Centos 6.8(它们都使用旧内核 2.6.32)给出作用域 全局到链接本地地址。
- 如果将范围更改为关联使用这些失真器,他会遇到讨论的问题:所有非本地传出的 IP 数据包的源 IP 地址将被替换
0.0.0.0
。 - 知道是什么导致了这种替代是很有趣的。如果我知道这一点,我就会找到第 2 项的答案。
- 和作用域 全局,尽管存在 RFC,但非本地传出 IP 数据包仍可通过最近的 VMWare Workstation 中内置的 NAT 路由器以及作为路由器的 Fedora 12 Linux 机器完美路由。