为什么不伪装就不起作用?

为什么不伪装就不起作用?

我有路由器 - G、台式机 - D、笔记本电脑 - L。我想通过 D 将 L 连接到互联网。

G 位于 192.168.1.1

D:enp1s0 - 192.168.1.2/24,gw G,eno1 - 10.0.0.1/16,作为 L 的路由器

L: enp1s0 - 10.0.0.2,gw 10.0.0.1。L 处的路由表:

netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG        0 0          0 enp1s0
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 enp1s0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0

启用 D 处的数据包转发:

sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

但是L没有连接到互联网:

traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  10.0.0.1 (10.0.0.1)  0.346 ms  0.339 ms *
 2  10.0.0.1 (10.0.0.1)  0.370 ms !X * *

很明显,L的数据包可以到达D,但是无法再传递下去了。

但是,当我在 D 上启用伪装时,L 可以连接:

firewall-cmd --zone=public --add-masquerade=yes
success

你能解释一下为什么只有在 D 的接口(直接连接到 L)上启用伪装时 L 才能连接到互联网吗?

答案1

需要 MASQUERADE 的原因在于 NAT 的工作方式。

考虑一下您的路由器 G。它从互联网服务提供商处获得一个 IP。该 IP 地址是路由器后面的所有系统通过该 IP 地址连接到互联网的地址,因此所有系统都伪装成该 IP 地址。(在住宅基本设置中,路由器就是这样工作的)。

您的计算机 D 充当笔记本电脑 L 的 NAT 网关,它必须遵守与互联网相同的工作规则。理想情况下,您至少要有一个内部 IP 地址,当它请求该子网中其他计算机以外的资源时,它需要能够将来自 L 的数据包伪装成 D 的内部 IP 地址,以便正确地通过 G 路由数据包。

使用计算机作为 VPN 服务器时也是如此;要进入网络的其余部分或特别是外部网络,您需要伪装成该服务器的 IP 地址。

这就是 NAT 的工作方式。这同样适用于代理等。

相关内容