首先确认内核支持并加载GRE模块,然后在两台主机上创建GRE隧道接口并配置IP地址,接着启用接口并验证连通性,最后根据需要配置静态路由实现子网互通,确保两端参数匹配且防火墙允许协议47。
Linux中的IP隧道(IP Tunneling)可用于在不同网络之间封装和传输数据包,常用于跨网络连接、IPv6过渡或构建虚拟专用网络。最常用的隧道类型是GRE、IPIP、SIT和VXLAN。以下以GRE隧道为例,说明如何在两台Linux主机之间建立和配置IP隧道。
1. 确认内核支持并加载模块
大多数现代Linux发行版默认支持IP隧道。可检查是否加载了相关内核模块:
modprobe ip_gre # 加载GRE模块
lsmod | grep gre # 确认模块已加载
如果使用IPIP或SIT(用于IPv6),则加载对应模块:
modprobe ipip
modprobe sit
2. 创建GRE隧道接口
在两端主机上分别创建GRE隧道。假设:
- 主机A公网IP:192.168.1.10
- 主机B公网IP:192.168.1.20
- 隧道内网IP:A端 10.0.0.1/30,B端 10.0.0.2/30
在主机A上执行:
ip tunnel add gre1 mode gre local 192.168.1.10 remote 192.168.1.20 ttl 255
ip addr add 10.0.0.1/30 dev gre1
ip link set gre1 up
在主机B上执行:
ip tunnel add gre1 mode gre local 192.168.1.20 remote 192.168.1.10 ttl 255
ip addr add 10.0.0.2/30 dev gre1
ip link set gre1 up
3. 验证隧道连通性
启用后,可在任一端ping对端隧道IP:
ping 10.0.0.2 # 从主机A测试
查看隧道状态:
ip tunnel show gre1
ip addr show gre1
确认输出中状态为“UP”,且封装模式正确。
4. 配置路由(可选)
若想通过隧道访问远程子网,需添加静态路由。例如,主机B后端有子网172.16.2.0/24:
# 在主机A添加路由
ip route add 172.16.2.0/24 via 10.0.0.2
确保主机B也配置了返回路由:
ip route add 172.16.1.0/24 via 10.0.0.1 # 假设A后端是此网段
隧道建立后,数据包将通过GRE封装在公网上传输,实现逻辑直连。关闭隧道可使用:
ip link set gre1 down
ip tunnel del gre1
基本上就这些。根据需求选择IPIP(精简,仅IPv4)、SIT(IPv6 over IPv4)或VXLAN(大规模虚拟化)等类型,操作方式类似。关键是两端参数匹配,且防火墙允许协议47(GRE)或对应端口。