我正在跟进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 或::/0
IPv6。您不要自动获取这些路线,但您通常无法做到,因为它们通常需要设置网关,而网关只能在以后才知道。
所以路由表是正确的。你的数据包不会经过 tun2,因为 tun2 是不与任何东西相关,就您的例子所示。
仅仅创造tun 接口(就像添加以太网卡是不够的)– 你还必须连接将它连接到某物。对于以太网,这显然需要插入电缆,而对于 tun 设备,必须在另一端运行程序。
也就是说,你必须设置 VPN 客户端使用 OpenVPN,并告诉它使用 tun2 作为 VPN 设备。(当然,您还需要在其他地方安装 OpenVPN 服务器。)
1(又名 10.0.0.0 掩码 255.255.255.0 – 但最好使用工具ip route
而不是route -n
。)