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
在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
添加路由:
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
原文:http://987146971.blog.51cto.com/5230841/1710326