IPIP 隧道数据包未发送

IPIP 隧道数据包未发送

我有一个带有外部 IP 的 VPS 40.40.40.40,并尝试为其创建 IPIP 隧道。以下是我尝试的方法:

#create interface megatun0 to tunnel traffic through the host 40.40.40.40.
sudo ip tunnel add megatun0 mode ipip remote 40.40.40.40 local 192.168.15.1

#set local address of the megatun0 interface
sudo ip address add 192.168.15.2 dev megatun0

#turn it on
sudo ip link set dev megatun0 up

#add a route to the routing table
sudo ip route add 192.168.15.0/24 dev megatun0

因此,我希望路由的 IP 数据包192.168.15.0/24 dev megatun0 scope link被重定向到40.40.40.40via IP 隧道。但是在笔记本电脑上执行ping 192.168.15.1并捕获tcpdump以下内容时:

$ sudo tcpdump -vv -n proto \\icmp

我甚至没有看到ICMP数据包被发送到 VPS。但我看到的是接口TX errors上的数据megatun0包在增加:

megatun0: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1480
        inet 192.168.15.2  netmask 255.255.255.255  destination 192.168.15.2
        inet6 fe80::5efe:c0a8:f01  prefixlen 64  scopeid 0x20<link>
        tunnel   txqueuelen 1000  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 115  dropped 0 overruns 0  carrier 115  collisions 0

我以为 IPIP 隧道数据包会在 VPS 端收到,然后被丢弃,因为不知道如何处理它们。但它们甚至没有被发送。

我做错了什么以及如何解决?

答案1

我误解了文档。隧道的remotelocal参数应该是双方都可以访问的 IP 地址。此外,应该local正是某个网络接口的地址。以下是man ip-tunnel关于的提及内容local

local ADDRESS
                 set the fixed local address for tunneled packets.
                 It must be an address on another interface of this
                 host.

因此,假设我的笔记本电脑所连接的外部 IPeth0如下50.50.50.50,则正确的隧道设置如下:

sudo ip tunnel add megatun0 mode ipip remote 40.40.40.40 local 50.50.50.50

相关内容