概括

概括

目前我连接到的网络的子网掩码为 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 私有子网。

这违反了RFC 3927 的“1.6 禁止替代使用”规定

因此,一些客户端遇到此配置问题也就不足为奇了。您可以尝试静态配置 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 上测试。

笔记

  1. 此解决方案在使用静态地址时存在重大缺陷。它与宿舍的 LAN 和 DHCP 不太匹配。
  2. 我很确定在某处有一行简单的配置行可以指示系统给出作用域 全局到链路本地地址 (169.254.0.0/16)。但我还没有找到。如果你找到了,请告诉我。
  3. 请注意,一些旧的和刚刚成熟的发行版没有这个问题。例如,Fedora 12 和新的 Centos 6.8(它们都使用旧内核 2.6.32)给出作用域 全局到链接本地地址。
  4. 如果将范围更改为关联使用这些失真器,他会遇到讨论的问题:所有非本地传出的 IP 数据包的源 IP 地址将被替换0.0.0.0
  5. 知道是什么导致了这种替代是很有趣的。如果我知道这一点,我就会找到第 2 项的答案。
  6. 作用域 全局,尽管存在 RFC,但非本地传出 IP 数据包仍可通过最近的 VMWare Workstation 中内置的 NAT 路由器以及作为路由器的 Fedora 12 Linux 机器完美路由。

答案3

169.254.xx 不可路由,它被设计为不通过路由器,它只能停留在自己的子网内。

被击溃,但是它不应该被击溃。

RFC 5735

这是“链接本地”块。如 RFC3927,用于单链路上主机之间的通信。主机通过自动配置获取这些地址,例如当无法找到 DHCP 服务器时。

另外,来自RFC 3927

主机不得将具有 IPv4 链路本地目标地址的数据包发送到任何路由器进行转发。

相关内容