GRE-over-IPSEC
配置 GRE over IPSEC 隧道
⼀. 技术介绍
IPsec
主要作⽤是对数据进⾏加密,因为他能提供所有有时候被单独⽤作实现加密的⼀种⽅法!IPsec建⽴的是⼀个逻辑隧道,并不是真正意义上的隧道!并且不能提供路由功能,因为IPsec不⽀持⾮ip流量,也不⽀持⼴播(组播)!
GRE
(通⽤路由封装)能很好的提供⼀个真正意义上的点对点的隧道,GRE是⼀种三层VPN封装技术。GRE可以对某些⽹络层协议(如IPX、Apple Talk、IP等)的报⽂进⾏封装,使封装后的报⽂能够在另⼀种⽹络中(如IPv4)传输,从⽽解决了跨越异种⽹络的报⽂传输问题,虽然⽆法提供加密,但是能很好的⽀持⾮ip流量和⼴播!
GRE over IPSec(使⽤IPsec来加密隧道进⾏传输
GRE封装可以让你的私有IP地址封装在全球可路由的 new IP header GRE header,实现在不同site 之间的互联,但是GRE本⾝是明⽂⽅式,所以需要IPSec来加密保护,⼀般⽤传输模式即可,因为是GRE接⼝,所以⽀持组播,常⽤的⼀般就是这种模式。
IPSec over GRE(加密数据流后从隧道传输
这种⽅式在现实中很少⽤到,⼀般是通过crypto map ⽅式建⽴IPsec, 然后再⽤GRE来增加⼀个新的IP header, 因为这种模式IPSec 不是⼀种接⼝,只是⼀种映射,所以不能⽀组播。
⼀些区别GRE over IPSEC
:ipsec中acl匹配的是tunnle流,源和⽬的是隧道的源和⽬的IPSEC over GRE
:acl匹配的就是业务流GRE over IPSEC
:ike对等体中remote-address地址是对⽅公⽹⼝的物理地址IPSEC over GRE
:ike对等体中remote-address地址是对⽅tunnel接⼝地址GRE over IPSEC
:ipsec policy应⽤在本地物理接⼝上IPSEC over GRE
:ipsec policy应⽤在本地tunnel接⼝上
准备环境
服务器A
- IP: 192.168.100.50
- GRE: 10.10.10.1
服务器B
- IP: 172.17.100.10
- GRE: 10.10.10.2
配置GRE
#加载ip_gre 模块
modprobe ip_gre
#查看是否安装模块
lsmod | grep ip_gre
服务器A
GRE 不支持 gre0 这个名
vim /etc/sysconfig/network-scripts/ifcfg-gre01
DEVICE=gre01
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=172.17.100.10
MY_OUTER_IPADDR=192.168.100.50
PEER_INNER_IPADDR=10.10.10.2/30
MY_INNER_IPADDR=10.10.10.1
BOOTPROTO=none
服务器B
GRE 不支持 gre0 这个名
vim /etc/sysconfig/network-scripts/ifcfg-gre01
DEVICE=gre01
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=192.168.100.50
MY_OUTER_IPADDR=172.17.100.10
PEER_INNER_IPADDR=10.10.10.1/30
MY_INNER_IPADDR=10.10.10.2
BOOTPROTO=none
添加路由
配置IPSEC
服务器A
[root@izcf705gcdvyec6fp7dbasz ~]yum install libreswan -y
[root@izcf705gcdvyec6fp7dbasz ~]## ipsec initnss
Initializing NSS database
[root@izcf705gcdvyec6fp7dbasz ~]## ipsec newhostkey --configdir /etc/ipsec.d --random /dev/urandom --output /etc/ipsec.d/01.secrets --verbose
ipsec newhostkey warning: --configdir is obsoleted, use --nssdir
ipsec newhostkey warning: --random is obsoleted, using --seeddev
ipsec rsasigkey: adjusting nssdir to /etc/ipsec.d
ipsec rsasigkey: Initializing NSS
ipsec rsasigkey: Opening NSS database "sql:/etc/ipsec.d" read-write
ipsec rsasigkey: getting 64 random seed bytes for NSS from /dev/urandom...
Generated RSA key pair with CKAID bb9c39f695e22b519c7cd4ae839cc657302f1c7f was stored in the NSS database
ipsec rsasigkey: output...
[root@izcf705gcdvyec6fp7dbasz ~]## ipsec showhostkey --left --ckaid bb9c39f695e22b519c7cd4ae839cc657302f1c7f
## rsakey AwEAAbdcV
leftrsasigkey=0sAwEAAbdcVfp9G+ijmxcY2wKpJcoo+b991gBxp1RtGY0Ii3svI/NZ2DCvb3aX7VZsheSib9cvSvj1onGkGWfK3Uzd03fILSaojP6dt5YmBcAG8E80QmIGuwOPR3ds5PtunE0aRE/VRoNaekgz5U4/jxFd7mpduSxz5RxjiRPf8lhhD4s+IJQ6ghJUZNG7XGgs8s2xjCJHybreeI3AKNDXZFEYOTFysFzf5jdxNQr4E2XRTqMLaDJKymv8TWmxwlko7RyLeu87K6Zv9YRfQbmzqlUp6k8Q8hT0krBs7xUDrOS2MG1ddwm1fEO9IdsbGusrXE2IPs+L45K4X0kdfAKUa+7ywspkj7fDUd0sY9Xy8Qh23dVkZm/arlxoLrhUa4mCxjJeDCqWwJNgZSfMaGQfTvaX0KO9U0JdwCbJPvKMslsOUQdLi5ZUwrebSkawpl9o9CqW0QryYPKPgKpcosUj2nw+un0nopIEz7xQ7st154ClOvX9D+9pZPhlA+EZi0a3zTB1fQ==
[root@izcf705gcdvyec6fp7dbasz ~]#
/etc/ipsec.d/ipsec.conf
手动修改一下 $leftrsasigkey
和 $rightrsasigkey
conn gre01
authby=rsasig
auto=start
type=transport
left=192.168.100.50
leftprotoport=gre
leftrsasigkey=$leftrsasigkey
right=172.17.100.10
rightprotoport=gre
rightrsasigkey=$rightrsasigkey
服务器B
[root@localhost ~]yum install libreswan -y
[root@localhost ~]## ipsec initnss
Initializing NSS database
[root@localhost ~]## ipsec newhostkey --configdir /etc/ipsec.d --random /dev/urandom --output /etc/ipsec.d/01.secrets --verbose;
ipsec newhostkey warning: --configdir is obsoleted, use --nssdir
ipsec newhostkey warning: --random is obsoleted, using --seeddev
ipsec rsasigkey: adjusting nssdir to /etc/ipsec.d
ipsec rsasigkey: Initializing NSS
ipsec rsasigkey: Opening NSS database "sql:/etc/ipsec.d" read-write
ipsec rsasigkey: getting 64 random seed bytes for NSS from /dev/urandom...
Generated RSA key pair with CKAID a6fb63a048925896a5b76d1b9fc3fa17c212059f was stored in the NSS database
ipsec rsasigkey: output...
[root@localhost ~]## ipsec showhostkey --left --ckaid a6fb63a048925896a5b76d1b9fc3fa17c212059f
## rsakey AwEAAeaSc
leftrsasigkey=0sAwEAAeaSckpX43+I9Oh7C0nRXked2s/cdvSutZadD2W2FDhUBZYK4OEy2hYnjFyJ+rWrwxvw0kEvbMwXmKpvwqBOufuOMqvH3DLgOaB1csfftdJfefALkFz8/psqD8yTdEr+sa7bSHJXcgyB9pdB3fyaIyLUCm92IFec5TwC2JDB4imtGIBsxtu3MwFSNJvaH2+nAkuYEfttp8o4n8ENcUwdnQ0ijmzd1CWkjpN//DSTFPciQg+WYbQWVswRgTlmYKeZFC7vq9x71R/t9YGrrTGM26D0izDb/nNBqQqD7DsufAf5sNemVPnrHw/3CTQLP5DgEYr0qVy11RipIMfuu4r/ySBt43H9aJXhmMyTvonP69CkQKHEbaoD9i0WHlU+i8QZrprZ9AAh+8g+UXsYUUJNSYYF2Ned6A/zuHF8kN7+6jhYMU8JemQf9BuMWSMg4DCMiYVPpDl337PVXLB1q/g4uLS+nozBaVb4bXG4VQXh0PPnuhX6hH7cjs1JHf6RLD0ota3git3dDfEBLXHo5ZyLVwm7Ys/T4jZFakQhB7Lj2If/HyhBEbxnRldkYG2PkIVH9Vos4/RZrV2IXLlPXb7+ttxRYLmHIk1lC/gZaGXSBHx3gtcPAmNuq0nFEiFlO3bPDTFtlATfDYKoFneOJFzxFKotfqHDtJ0RhuvXIeE=
[root@localhost ~]#
/etc/ipsec.d/ipsec.conf
手动修改一下 $leftrsasigkey
和 $rightrsasigkey
conn gre01
authby=rsasig
auto=start
type=transport
left=172.17.100.10
leftprotoport=gre
leftrsasigkey=$leftrsasigkey
right=192.168.100.50
rightprotoport=gre
rightrsasigkey=$rightrsasigkey
配置路由及iptable nat
TIPS
如果是单向网络只需要配置出口服务器,如果是双向网络,则两台服务器都需要配置
#开启转发
echo 1 > /proc/sys/net/ipv4/ip_forward
#或者编辑 /etc/sysctl.conf添加如下
net.ipv4.ip_forward = 1
配置iptables
配置iptables nat 时,指定出口可以减少资源和开销也可以最小化打通网络,做到安全管控。
iptables -t nat -A POSTROUTING -s 10.10.10.5/30 -o enp0s3 -j MASQUERADE
添加路由:
route add 114.114.114.114 gw 10.10.10.5 dev gre01
如果需要设置成默认,则需要删除源有的默认路由,使用
route del
验证

加密后:

未加密
