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

阿里云VPC网络之间如何通过GRE隧道通信

阿里云VPC网络之间如何通过GRE隧道通信

阿里云VPC网络之间如何通过GRE隧道通信

此前介绍了VPC网络下阿里云服务器如何配置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(可参考此前的SNAT教程),
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