这种隧道技术在 Linux 中已经存在很长时间了。它需要 2 个内核模块,ipip.o 和 new_tunnel.o。
假设您有 3 个网络:内部网络 A 和 B,以及中间网络 C(或者说,互联网)。所以我们有网络 A
network 10.0.1.0 netmask 255.255.255.0 router 10.0.1.1 |
路由器在网络 C 上的地址为 172.16.17.18。
和网络 B
network 10.0.2.0 netmask 255.255.255.0 router 10.0.2.1 |
路由器在网络 C 上的地址为 172.19.20.21。
就网络 C 而言,我们假设它将传递从 A 发送到 B 以及从 B 发送到 A 的任何数据包。您甚至可以使用互联网来实现这一点。
以下是您需要做的
首先,确保模块已安装
insmod ipip.o insmod new_tunnel.o |
然后,在网络 A 的路由器上,您执行以下操作
ifconfig tunl0 10.0.1.1 pointopoint 172.19.20.21 route add -net 10.0.2.0 netmask 255.255.255.0 dev tunl0 |
在网络 B 的路由器上执行以下操作
ifconfig tunl0 10.0.2.1 pointopoint 172.16.17.18 route add -net 10.0.1.0 netmask 255.255.255.0 dev tunl0 |
如果您完成了隧道配置
ifconfig tunl0 down |
好了,您完成了。但是,您无法通过 IP-in-IP 隧道转发广播或 IPv6 流量。您只是连接了 2 个通常无法相互通信的 IPv4 网络,仅此而已。就兼容性而言,这段代码已经存在很长时间了,因此它可以兼容回溯到 1.3 内核。据我所知,Linux IP-in-IP 隧道不适用于其他操作系统或路由器。它很简单,而且有效。如果必须使用,就用它,否则使用 GRE。