tunnel 技术可以使不同地方的机房通过公网实现两边的机房内部的局域网互联互通。


以下是配置环境:

  

------------------------------------------INTERNET-----------------------------------------

        | 192.168.100.253/24| 10.6.88.229 <------> 10.6.88.223 |192.168.200.253/24| 

client1 |-      -     -     |   -     -    |      |    -    -  |   -      -    -  |client 2

        |    eth0(内网)   | eth1(外网) |      | eth1(外网 |  eth0(内网)    |        

-------------------------------------------------------------------------------------------

在10.6.88.229中配置:

 

 创建tunnel.sh脚本(多网段环境在下面脚本目标内网路由中加入相应的ip段即可)

   #!/bin/bash

   #加载路由模块

   modprobe ipip

   modprobe ip_gre

   #添加隧道 ip tunnel add 隧道名 mode 协议 remote 远端可通ip local 本地出口ip ttl 255(64)

   ip tunnel add tun30 mode gre remote 10.6.88.223 local 10.6.88.229 ttl 255

   #启动隧道

   ip link set tun30 up

   #为隧道增加虚拟ip

   ip addr add 172.16.10.1 dev tun30

   #增加路由,目标本机虚拟ip通过本机tun30隧道连接

   ip route add 172.16.10.1 dev tun30

   #增加路由,目标远端内网ip通过本机tun30隧道连接

   ip route add 192.168.200.0/24 dev tun30 via 172.16.10.1

   #增加路由,目标远端隧道ip通过本机tun30隧道连接

   ip route add 192.168.10.0/24 dev tun30 via 172.16.10.1

   #增加一个 arp 的响应机制及打开ip转发功能

   #arp -Ds 192.168.100.253 eth1 pub   

   sysctl -w net.ipv4.ip_forward=1

   #隧道段ip的nat通过本地内网ip向外发送

   /sbin/iptables -t nat -o eth0 -A POSTROUTING -s 172.16.10.0/24 -j MASQUERADE

 


 在10.6.88.223中配置:

 

 创建tunnel.sh脚本(多网段环境在下面脚本目标内网路由中加入相应的ip段即可)

   #!/bin/bash

   #加载路由模块

   modprobe ipip

   modprobe ip_gre

   #添加隧道 ip tunnel add 隧道名 mode 协议 remote 远端可通ip local 本地出口ip ttl 255(64)

   ip tunnel add tun40 mode gre remote 10.6.88.229 local 10.6.88.223 ttl 255

   #启动隧道

   ip link set tun40 up

   #为隧道增加虚拟ip

   ip addr add 192.168.10.1 dev tun40

   #增加路由,目标本机虚拟ip通过本机tun40隧道连接

   ip route add 192.168.10.1 dev tun40

   #增加路由,目标远端内网ip通过本机tun40隧道连接

   ip route add 192.168.100.0/24 dev tun40 via 192.168.10.1

   #增加路由,目标远端隧道ip通过本机tun40隧道连接

   ip route add 172.16.10.0/24 dev tun40 via 192.168.10.1

   #增加一个 arp 的响应机制及打开ip转发功能

   #arp -Ds 192.168.200.253 eth1 pub

   sysctl -w net.ipv4.ip_forward=1

   #隧道段ip的nat通过本地内网ip向外发送

   /sbin/iptables -t nat -o eth0 -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE


添加路由:


 client1与client2上分别加以下路由(多网段的环境直接加入相应IP段的路由即可)

  route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.100.253

  route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.200.253


 分别在10.6.88.229和10.6.88.223执行tunnel.sh脚本后就已经建立起tunnel了

 

 最后检测下连通性,直接在client1上ping client2


-------------------------------------------------------------------------------------------


配置数据加密:

 

 安装ipsec-tools

   wget ftp://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel5/x86_64/ipsec-tools-0.8.0-1.el5.pp.x86_64.rpm 

   wget ftp://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel5/x86_64/ipsec-tools-libs-0.8.0-1.el5.pp.x86_64.rpm 

   yum localinstall --nogpgcheck ipsec-tools-libs-0.8.0-1.el5.pp.x86_64.rpm ipsec-tools-0.8.0-1.el5.pp.x86_64.rpm

   

下面在 10.6.88.229 上建立ipsec 

  cat /etc/setkey.conf


   flush; 

   spdflush; 

   add 10.6.88.229 10.6.88.223 esp 11571 -E 3des-cbc "__esp_test_3des_password"; 

   add 10.6.88.223 10.6.88.229 esp 11572 -E 3des-cbc "__esp_test_3des_password"; 

   add 10.6.88.229 10.6.88.223 ah 15071 -A hmac-md5 "ah_test_password"; 

   add 10.6.88.223 10.6.88.229 ah 15072 -A hmac-md5 "ah_test_password"; 

   spdadd 10.6.88.229 10.6.88.223 any -P out ipsec  

           esp/transport//require  

           ah/transport//require; 

   spdadd 10.6.88.223 10.6.88.229 any -P in  ipsec  

           esp/transport//require;  

           ah/transport//require; 


 setkey -f  /etc/setkey.conf(激活配置文件,重启后失效)

 echo "setkey -f  /etc/setkey.conf" >> /etc/rc.local(加入开机自启动)

          


在10.6.88.223上创建setkey.conf

    cat /etc/setkey.conf


   flush; 

   spdflush; 

   add 10.6.88.223 10.6.88.229 esp 11571 -E 3des-cbc "__esp_test_3des_password"; 

   add 10.6.88.229 10.6.88.223 esp 11572 -E 3des-cbc "__esp_test_3des_password"; 

   add 10.6.88.223 10.6.88.229 ah 15071 -A hmac-md5 "ah_test_password"; 

   add 10.6.88.229 10.6.88.223 ah 15072 -A hmac-md5 "ah_test_password"; 

   spdadd 10.6.88.223 10.6.88.229 any -P in ipsec 

           esp/transport//require 

           ah/transport//require; 

   spdadd 10.6.88.223 10.6.88.229 any -P out  ipsec 

           esp/transport//require; 

           ah/transport//require; 

        

 setkey -f  /etc/setkey.conf(激活配置文件,重启后失效)

 echo "setkey -f  /etc/setkey.conf" >> /etc/rc.local(加入开机自启动)


测试:

 在10.6.8.229上执行以下命令,通过在client1上访问client2。查看数据包中GRE转变成AH且包含ESP数据证明加密完成

   tcpdump -n -i eth1 host 10.6.8.229


        

参考以下链接:

 

 http://blog.sina.com.cn/s/blog_5f3f20890100rerj.html

 http://www.chinaunix.net/old_jh/4/1055425.html

 http://www.54yw.com/?id=60