运维服务小笔记

If not now,when?If not me,who?

四月 30th, 2015

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

1,645 views, linux, Server, by 川望.

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

测试环境如下:

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

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

1

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}

拓扑如下:

2

VPC1-GW操作
加载gre模块

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

创建隧道tun1

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

激活隧道tun1

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

为隧道配置互联地址

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

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

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

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

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

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

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

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

登陆VPC2的控制台为VPC2路由器配置默认路由,指向配置了EIP的VPC2-GW(可参考此前的SNAT教程),
4

 

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


[root@VPC2-GW ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[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网络的地址:

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

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

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

3333

 



Back Top

回复自“阿里云VPC网络之间通过GRE隧道打通”

  1. 还有gw ping 对端 client地址不通的原因是 系统默认以tun1的地址出去了,如果指定源地址为GW eth0的地址也是能通的

  2. 可以在vroute上加上去往tun1互联地址的路由指向到gw的ECS上即可,这样不必做nat转换了

发表评论

电子邮件地址不会被公开。 必填项已用*标注

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

无觅相关文章插件,快速提升流量