文章目录
1. 环境介绍
华为云上有三台云主机,内网 CIDR 是 192.168.0.0/24,阿里云上有三台云主机,内网 CIDR 是 172.26.32.0/24。现在想要打通两个云商之间的内网,使得华为云上的云主机能够访问阿里云上的内网IP地址,同时阿里云上的云主机能够访问华为云上的内网IP地址。下边将会介绍通过 GRE 隧道打通华为云 192.168.0.200 主机与阿里云 172.26.32.235 两台云主机之间的内网通信,GRE 隧道搭建完成后,192.168.0.200 与 172.26.32.235 能够正常的通过内网 IP 进行互通,但并不能支持 172.168.0.201 与 172.26.32.103 主机之间的内网通信,如果想要打通华为云内网与阿里云内网所有云主机的内网通信,需要在 GRE 隧道搭建完成后做额外的服务配置,本章节暂时不做介绍,后续单独介绍。
2 GRE隧道搭建
2.1 华为云 GRE 隧道安装
我们选择内网 IP 地址为 192.168.0.200 的云主机部署 GRE隧道。
- 首先修改内核配置,开启
ip_forward
。
cat > /etc/sysctl.d/gre.conf <<EOF
net.ipv4.ip_forward=1
EOF
sysctl -p /etc/sysctl.d/gre.conf
- 加载 ip_gre 模块
modprobe ip_gre
- 查看 ip_gre 模块是否加载成功
lsmod | grep ip_gre
- 创建隧道,
remote IP
地址为阿里云云主机的公网IP地址,local IP
为华为云云主机内网地址。
ip tunnel add tunnel999 mode gre remote 114.116.84.123 local 192.168.0.200
- 开启隧道
ip link set tunnel999 up mtu 1476
- 设置隧道 IP,隧道 IP 地址可以*设置,但不要和内网 CIDR 冲突。
ip addr add 192.168.100.1 peer 192.168.100.2/32 dev tunnel999
- 设置隧道路由,路由配置建议使用阿里云内网 CIDR 值
ip route add 172.26.32.0/24 dev tunnel999
- 查看路由
route -n
华为云上的GRE隧道搭建完成,但此时隧道无法正常工作,需要等待阿里云上的隧道搭建完成后,隧道才能正常实现阿里云与华为云内网通信。
2.2 阿里云 GRE 隧道安装
我们选择内网 IP 地址为 172.26.32.235 的云主机部署 GRE隧道。
- 首先修改内核配置,开启 ip_forward。
cat > /etc/sysctl.d/gre.conf <<EOF
net.ipv4.ip_forward=1
EOF
sysctl -p /etc/sysctl.d/gre.conf
- 加载 ip_gre 模块
modprobe ip_gre
- 查看 ip_gre 模块是否加载成功
lsmod | grep ip_gre
- 创建隧道,
remote IP
地址为华为云云主机的公网IP地址,local IP
为阿里云云主机内网地址。
ip tunnel add tunnel999 mode gre remote 112.124.59.21 local 172.26.32.235
- 开启隧道
ip link set tunnel999 up mtu 1476
- 设置隧道 IP,隧道 IP 地址可以*设置,但不要和内网 CIDR 冲突。
ip addr add 192.168.100.2 peer 192.168.100.1/32 dev tunnel999
- 设置隧道路由,路由配置建议使用华为云内网CIDR值
ip route add 192.168.0.0/24 dev tunnel999
- 查看路由表
route -n
如上图中 tunnel999 虚拟网卡接口有两条路有记录。
3. 设置安全组
不同的云商设置安全组的菜单不一样,例如在华为云上设置安全组,允许GRE协议。如果不设置安全组,将会导致GRE隧道无法正常通信。
阿里云上设置安全组请参考阿里云操作手册,如果有防火墙策略禁用了GRE协议,请清理防火墙中相关的设置,允许GRE协议。
4. 验证GRE隧道
4.1 在华为云上 ping 阿里云云主机内网IP
ping 172.26.32.235
4.2 在阿里云上 ping 华为云云主机内网IP
ping 192.168.0.200
5. 总结
通过搭建GRE隧道,将两个不同云商之间的云主机内网打通,实现两个云之间节点内网通信。此功能与云商提供的对等连接有相似之处,云商提供的对等连接服务一般针对同一云商跨VPC之间的网络互通,通过自行搭建GRE隧道,可实现不同云商之间云主机内网互通,但这种做法存在网络安全问题,以及网络稳定性问题,毕竟GRE隧道仍然通过公网通信,想要实现更安全的网络隧道服务,可通过IPSec或VPN建立加密通信服务,保证通信的安全可靠。亦或是将加密传输交给业务应用自行处理,GRE隧道只负责网络通道的能力,但这种做法依赖于业务应用必须支持加密传输。
通过 ip
命令行工具添加的 GRE 隧道配置会在服务器重启之后消失,所以,上述方法适合测试或临时搭建隧道调试使用,如果需要将 GRE 隧道配置持久话,可以通过将上述命令做成 shell 脚本,通过 systemctl
开机启动执行脚本创建 GRE 隧道。