答案是问题对我理解 openvpn 使用的路由非常有帮助。但我仍然对隧道接口(下面的 tun0)感到困惑,特别是在访问远程 LAN 方面。
这是路由表:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.172.1.5 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1
10.172.1.1 10.172.1.5 255.255.255.255 UGH 0 0 0 tun0
10.172.1.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
128.0.0.0 10.172.1.5 128.0.0.0 UG 0 0 0 tun0
168.1.6.15 192.168.1.1 255.255.255.255 UGH 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1
我了解,当使用 openvpn 时,它首先转到 10.172.1.1,而不是 10.172.1.5,因为这个单播规则:
10.172.1.1 10.172.1.5 255.255.255.255 UGH 0 0 0 tun0
然后,由于没有针对 10.172.1.1 的规则,因此它将转到 eth1。但是由于 eth1 具有此单播规则:
168.1.6.15 192.168.1.1 255.255.255.255 UGH 0 0 0 eth1
它通向隧道的另一侧,即 168.1.6.15。
在上述问题的答案中,我们可以添加此规则来访问远程 LAN:
10.172.1.0/24 dev tun0 proto kernel scope link src 10.172.1.5
但是它如何访问远程 LAN 电脑?它们是否可直接从隧道接口 (tun0) 访问?如果可以,openvpn 如何访问外部(它们是远程的)?因为我假设它在这种情况下不使用 168.1.6.15。是吗?
谢谢您的澄清!
答案1
通过 tun0 设备路由的所有流量(包括流向 10.172.1.0/24 子网的流量,代表远程局域网电脑) 经过加密封装后通过 eth1 接口进行路由。
封装的数据包:
- 源 IP 在 10.172.1.0/24(tun0 的 IP 地址)
- 目标 IP 为 10.172.1.0/24
数据包通过 eth1 发送:
- 源 IP 为 192.168.1.0/24(eth1 IP 地址)
- 目标 IP:168.1.15