我有一个带有外部 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.40
via 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
我误解了文档。隧道的remote
和local
参数应该是双方都可以访问的 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