当将 IP 分配给新创建的 OpenVPN 接口时,它是否会为该 IP 的子网创建默认路由?

当将 IP 分配给新创建的 OpenVPN 接口时,它是否会为该 IP 的子网创建默认路由?

我正在跟进OpenVPN 学习教程

按照以下部分的步骤:let's try it 我使用 OpenVPN 创建一个接口 tun2,并为其分配一个 IP

sudo OpenVPN --mktun --dev tun2
sudo ip link set tun2 up
sudo ip addr add 10.0.0.1/24 dev tun2

然后我使用 tcpdump 来监控流经的数据包tun2

sudo tcpdump -i tun2 

ping 10.0.0.2在终端上输入,但在 tcpdump 输出上看不到任何内容,而且ping卡住了,没有输出任何内容。

在教程中,它说由于 tun2 接口分配了 IP 10.0.0.1/24,因此带有 10.0.0.2 的 ping 数据包应该通过,tun2因为会有默认路由。但在我的情况下,这种情况并没有发生。

#sudo route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun2
192.168.0.0     0.0.0.0         255.255.255.0   U     9      0        0 wlan0

而且很奇怪ping卡住了,什么都没输出。在教程中,结果应该是这样的:

# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
From 10.0.0.1 icmp_seq=3 Destination Host Unreachable

顺便问一下:是否由于防火墙而需要添加 iptables?

答案1

您的教程正确地说明了数据包将去往何处,但并未明确说明数据包为何会去往那里。您或教程混淆了“默认路由”和“默认创建的路由”。

当您为接口分配 IP 地址时,子网默认情况下,通过它创建路由。在您的示例中,当您将 10.0.0.1/24 分配给 tun2 时,它做过创建相应的10.0.0.0/24路由1

但“默认路线”具体来说表示最不具体的可能路由 - 即0.0.0.0/0针对 IPv4 或::/0IPv6。您不要自动获取这些路线,但您通常无法做到,因为它们通常需要设置网关,而网关只能在以后才知道。


所以路由表是正确的。你的数据包不会经过 tun2,因为 tun2 是不与任何东西相关,就您的例子所示。

仅仅创造tun 接口(就像添加以太网卡是不够的)– 你还必须连接将它连接到某物。对于以太网,这显然需要插入电缆,而对于 tun 设备,必须在另一端运行程序。

也就是说,你必须设置 VPN 客户端使用 OpenVPN,并告诉它使用 tun2 作为 VPN 设备。(当然,您还需要在其他地方安装 OpenVPN 服务器。)


1(又名 10.0.0.0 掩码 255.255.255.0 – 但最好使用工具ip route而不是route -n。)

相关内容