使用Vyatta IPSec Vpn让内网互联
2014-11-29 00:07:53 阿炯

鉴于业务的需要,将位于两个机房的服务器组的内网能互联互通,同时尽量保证对应用的透明。另外一种运用场景是一家公司位于两地,但需要将它们联合起来成为一个网络。这些都需要借助于vpn技术,基于远程接入技术来实现。另外一个使用地方是突破一些上层网络的速度限制,在实际的工作中,发现位于同城的两个idc间在传输文件时速度很慢,甚至在传送几kb大小的文件时都会超时,在使用ipsec技术将两个机房连通后可以达到10Mbps左右。

本文使用vyatta这款开源的软路由技术来实现,将两个机房连接起来,让内网互相间自由访问。用于访问不便于向公网开放的服务(mysql服务、数据同步等),为管理用户提供vpn登录服务,为内网机器提供上网服务等。这也是vpn应用的一种,基于ipsec,站点对站点:IPsec Site‐to‐Site VPN,需要用到的技术简介如下:

IPSec基本概念

IKE协议简介

这里将位于公网上的两台vyatta路由后面的内网连接起来,让其后面的机器可以互相访问。

west
eth0:180.1.2.188,eth1:192.168.20.0/24

east
eth0:218.3.4.218,eth1:192.168.30.0/24

west与east是两台路由的代称,在配置为了进行好的区别而设置的。1W:即west向的一条ike通道。

设置将ipsec接口'绑定'到物理接口上:
set vpn ipsec ipsec‐interfaces interface eth0

如果不指定,在后面提交时就会出错。

[ vpn ipsec ipsec-interfaces ]
VPN configuration error: No IPSEC interfaces specified.

[[vpn]] failed
Commit failed


=====west 路由=====
#路由器的公网地址:218.3.4.218
set vpn ipsec ipsec-interfaces interface eth0
set vpn ipsec ike-group IKE-1W proposal 1
set vpn ipsec ike-group IKE-1W proposal 1 encryption aes256
set vpn ipsec ike-group IKE-1W proposal 1 hash sha1
set vpn ipsec ike-group IKE-1W proposal 2 encryption aes128
set vpn ipsec ike-group IKE-1W proposal 2 hash sha1
set vpn ipsec ike-group IKE-1W lifetime 3600

set vpn ipsec esp-group ESP-1W proposal 1
set vpn ipsec esp-group ESP-1W proposal 1 encryption aes256
set vpn ipsec esp-group ESP-1W proposal 1 hash sha1
set vpn ipsec esp-group ESP-1W proposal 2 encryption 3des
set vpn ipsec esp-group ESP-1W proposal 2 hash md5
set vpn ipsec esp-group ESP-1W lifetime 1800

#查看上面的配置
show vpn ipsec ike-group IKE-1W
show vpn ipsec esp-group ESP-1W

#开始设置s2s,peer是需要连接的对方的路由器的公网地址
set vpn ipsec site-to-site peer 180.1.2.188 authentication mode pre-shared-secret
edit vpn ipsec site-to-site peer 180.1.2.188
set authentication pre-shared-secret freeoa_vpn_key
set default-esp-group ESP-1W
set ike-group IKE-1W
set local-address 218.3.4.218
#设置隧道1
set tunnel 1 local prefix 192.168.30.0/24
set tunnel 1 remote prefix 192.168.20.0/24
set tunnel 1 esp-group ESP-1W
top
commit

#查看s2s的配置
show vpn ipsec site-to-site peer 180.1.2.188

#Nat配置,规则必须要先于所有的nat规则,即30到20网段nat是先于30到所有其它网络的规则处理,或这样理解:对于目标地址是20网段,而源地址是30网段的包,启用透明nat伪装。
set nat source rule 5 destination address '192.168.20.0/24'
set nat source rule 5 'exclude'
set nat source rule 5 outbound-interface 'eth0'
set nat source rule 5 source address '192.168.30.0/24'
set nat source rule 5 translation address 'masquerade'

set nat source rule 10 outbound-interface 'eth0'
set nat source rule 10 source address '192.168.30.0/24'
set nat source rule 10 translation address 'masquerade'

=====east 路由=====
#公网地址:180.1.2.188
set vpn ipsec ipsec-interfaces interface eth0
set vpn ipsec ike-group IKE-1E proposal 1
set vpn ipsec ike-group IKE-1E proposal 1 encryption aes256
set vpn ipsec ike-group IKE-1E proposal 1 hash sha1
set vpn ipsec ike-group IKE-1E proposal 2 encryption aes128
set vpn ipsec ike-group IKE-1E proposal 2 hash sha1
set vpn ipsec ike-group IKE-1E lifetime 3600

show vpn ipsec ike-group IKE-1E
set vpn ipsec esp-group ESP-1E proposal 1
set vpn ipsec esp-group ESP-1E proposal 1 encryption aes256
set vpn ipsec esp-group ESP-1E proposal 1 hash sha1
set vpn ipsec esp-group ESP-1E proposal 2 encryption 3des
set vpn ipsec esp-group ESP-1E proposal 2 hash md5
set vpn ipsec esp-group ESP-1E lifetime 1800

set vpn ipsec site-to-site peer 218.3.4.218 authentication mode pre-shared-secret
edit vpn ipsec site-to-site peer 218.3.4.218
set authentication pre-shared-secret freeoa_vpn_key
set default-esp-group ESP-1E
set ike-group IKE-1E
set local-address 180.1.2.188
set tunnel 1 local prefix 192.168.20.0/24
set tunnel 1 remote prefix 192.168.30.0/24
set tunnel 1 esp-group ESP-1E
top
commit

show vpn ipsec site-to-site peer 218.3.4.218

#NAT配置参考如上,注意写法。

至此两边的配置就算完成了,没有问题的话,这个通道就已经建立起来了。

===========
查看所建立的连接统计及状态
show vpn ipsec sa
Peer ID / IP                            Local ID / IP               
------------                            -------------
180.1.2.188                         218.3.4.218                         
    Tunnel  State  Bytes Out/In   Encrypt  Hash  NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----  -----  ------  ------  -----
    1       up     71.5M/13.9M    aes256   sha1  no     1247    1800    all
查看链路状态
show vpn ipsec status
IPSec Process Running PID: 5298

1 Active IPsec Tunnels

IPsec Interfaces :
        eth0    (no IP on interface statically configured as local-ip for any VPN peer)
===========

这两方配置完成后,会自动连接,也就是说:只要公网口能够互联互通,内网也就能通了。现在可以试ping一下对方后面的机器,或用mtr工具看下路由的走法。另外有一点需要注意:

两边的机器要有到需要连接的一方的路由(如果双方后的两台机器各自的默认网关就是vyatt路由,就不必手动添加到对方的路由了),否则需要为其添加到对方网段的路由(192.168.20.251):
/sbin/route add -net 192.168.30.0 netmask 255.255.255.0 gw 192.168.20.251

#其它可能根据不同网段的情况的配置,绝大多数情况下都是不需要的。
set vpn ipsec nat‐traversal enable
set vpn ipsec nat‐networks allowed‐network 10.0.0.0/8
set vpn ipsec nat‐networks allowed‐network 192.168.0.0/16 exclude 192.168.40.0/24

这种方式就将位于不同地方的两个内网连接起来了,只要设置好了路由就可以互联互通了,与pptp vpn不同的是,它对应用的地址是通明的;使用pptp的方式会再多引入一段ip地址,而应用所看到的地址是这个多出的一段地址的ip地址,虽然可以忽略它的存在,但时不时地也能感觉到它的存在。