+86 135 410 16684Mon. - Fri. 10:00-22:00

阿里云VPC网络之间通过GRE隧道打通

阿里云VPC网络之间通过GRE隧道打通

阿里云VPC网络之间通过GRE隧道打通

阿里云服务器如何配置Snat让整个VPC网络都通过一个EIP访问公网,今天介绍一下如何通过GRE隧道将两个VPC网络的私网打通。

测试环境如下:

2个VPC(VPC1,VPC2)代表两个完全隔离的物理网络

每个VPC网络交换机,路由器,公网IP各一个,ECS2台,一台作为VPC网络的网关,一台作为局域网内部的服务器。

14

VPC1:   {EIP:112.74.32.191    GW:172.16.1.1    VPC1-Client:   172.16.1.2}

VPC2:   {EIP:112.74.32.161    GW:172.16.2.1     VPC2-Client:   172.16.2.2}

拓扑如下:

23

VPC1-GW操作
加载gre模块

1 [root@VPC1-GW ~]# modprobe ip_gre
2 [root@VPC1-GW ~]# lsmod |grep gre
3 ip_gre 9575 0
4 ip_tunnel 12597 1 ip_gre

创建隧道tun1

1 [root@VPC1-GW ~]# ip tunnel add tun1 mode gre remote 112.74.32.161 local 172.16.1.1

激活隧道tun1

1 [root@VPC1-GW ~]# ip link set tun1 up

为隧道配置互联地址

1 [root@VPC1-GW ~]# ip addr add 192.168.2.1 peer 192.168.2.2 dev tun1

将访问VPC2网络的数据都丢到tun1接口

1 [root@VPC1-GW ~]# route add -net 172.16.2.0/24 dev tun1

#VPC2-GW配置和VPC1一样,只是链路反过来,按照实际情况修改一下。

1 [root@VPC2-GW ~]# modprobe ip_gre
2 [root@VPC2-GW ~]# lsmod |grep gre
3 ip_gre 9575 0
4 ip_tunnel 12597 1 ip_gre
5 [root@VPC2-GW ~]# ip tunnel add tun1 mode gre remote 112.74.32.191 local 172.16.2.1
6 [root@VPC2-GW ~]# ip link set tun1 up
7 [root@VPC2-GW ~]# ip addr add 192.168.2.2 peer 192.168.2.1 dev tun1
8 [root@VPC2-GW ~]# route add -net 172.16.1.0/24 dev tun1

查看隧道,属于激活状态
33
从VPC2网络测试VPC1的GW,已经可以联通,从VPC1测试VPC2的GW也可以联通了

1 [root@VPC2-GW ~]# nc -zv 172.16.1.1 22
2 Connection to 172.16.1.1 22 port [tcp/ssh] succeeded!
3 [root@VPC1-GW ~]# nc -vz 172.16.2.1 22
4 Connection to 172.16.2.1 22 port [tcp/ssh] succeeded!

至此,两个VPC网络的网关都已经能互通了,但是测试两个VPC网络的其他服务器,目前依然不能互通,如下:
61
这是因为路由还不通,这里以VPC2的client访问VPC1的client为例:

登陆VPC2的控制台为VPC2路由器配置默认路由,指向配置了EIP的VPC2-GW
42

 

登陆VPC2-GW,开启IP转发,并配置SNAT,让VPC1client的数据包转换为GRE隧道可以通讯的192.168.2.2这个IP:

1 [root@VPC2-GW ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
2 [root@VPC2-GW ~]# iptables -t nat -I POSTROUTING -s 172.16.2.0/24 -d 172.16.1.0/25 -j SNAT --to 192.168.2.2

这时,VPC2-client的数据包已经可以到达VPC1-GW了(VPC2-client->VPC2路由->VPC2-G->GRE->VPC1-GW),但是依然Ping不通,抓包看一下:

111

源地址是VPC1的互联地址,目标地址是172.16.1.2,这个路径显然是不通的,需要VPC1-GW将这个数据包转换为VPC1网络的地址:

1 [root@VPC2-GW ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
2 [root@VPC1-GW ~]# iptables -t nat -I POSTROUTING -j SNAT --to 172.16.1.1

配置完毕后,VPC1->VPC2反向也做同样的配置。

至此再做测试,VPC1和VPC2的网络就完全互通了:

3333

 

北京 上海 天津 重庆 河北 山东 辽宁 黑龙江 吉林 甘肃 青海 河南 江苏 湖北 湖南 江西 浙江 广东 云南 福建 海南 山西 四川 陕西 贵州 安徽 广西 内蒙古 西藏 新疆 宁夏 澳门 香港 台湾