搭建ipse隧道
我没有太多的物理服务器,实验环境只能用四台装了linux的虚拟机来模拟,用户层工具是openswan。大致拓扑如下(我有点懒,公网地址我用的194.168.10.0/24,别和192.168.xx.xx弄混了)

LS(left server)的公网地址是194.168.10.4,私网地址是192.168.10.4。RS(right server)的公网地址是194.168.10.5,私网地址是192.168.5.5。LC(left client)是LS私网下面的一台客户机,地址是192.168.4.100。RC(right client)是RS下的一台客户机,地址是192.168.5.100。
openswan的安装过程我就不写了,各个linux的发行版的包管理都有合适的安装包。
第一步模配置地址和路由来模拟真实的网络环境
LS配置如下
ifconfig eth0 192.168.4.4
ifconfig eth1 194.168.10.4
ip route add default via 194.168.10.5
LC配置如下
ifconfig eth0 192.168.4.100
ip route add default via 192.168.4.4
RS配置如下
ifconfig eth0 192.168.5.5
ifconfig eth1 194.168.10.5
ip route add default via 194.168.10.4
RC配置如下
ifconfig eth0 192.168.5.100
ip route add default via 192.168.5.5
还有非常重要的一点,需要在LS和RS上打开内核转发功能
echo 1 >/proc/sys/net/ipv4/ip_forward
第二步设置ipsec
- 生成密钥对,在LS上执行
ipsec newhostkey --output /etc/ipsec.d/john_snow.secrets
ipsec showhostkey --left --file /etc/ipsec.d/john_snow.secrets
然后在RS上执行
ipsec newhostkey --output /etc/ipsec.d/john_snow.secrets
ipsec showhostkey --right --file /etc/ipsec.d/john_snow.secrets
把输出的内容保存起来,之后会用。
- 在LS和RS上修改/etc/ipsec.conf
version 2.0 # conforms to second version of ipsec.conf specification # basic configuration
config setup
# Debug-logging controls: "none" for (almost) none, "all" for lots.
# klipsdebug=none
# plutodebug="control parsing"
# For Red Hat Enterprise Linux and Fedora, leave protostack=netkey
# nat_traversal=yes
protostack=netkey include /etc/ipsec.d/*.conf
- 在LS和RS上分别添加一个/etc/ipsec.d/john_snow.conf,内容如下
conn john_snow
type=tunnel
authby=rsasig
compress=yes
left=194.168.10.4
leftsubnet=192.168.4.0/24
leftid=@left
leftrsasigkey=<刚才LS上输出的值>
right=194.168.10.5
rightsubnet=192.168.5.0/24
rightid=@right
rightrsasigkey=<刚才RS上输出的值>
auto=add
- 在LS和RS上启动ipsec
service ipsec restart
- 建立连接
ipsec auto --up john_snow
测试一下看看
从RC里面ping 192.168.4.100也就是LC的地址,如果配置没错应该就可以ping通了,不通的话去检查一下iptables规则有没有问题。然后从RS的eth1抓包看一下
06:08:04.431719 IP 194.168.10.5 > 194.168.10.4: ESP(spi=0x0c6af04f,seq=0x137), length 132
06:08:04.432098 IP 194.168.10.4 > 194.168.10.5: ESP(spi=0x4654f5bf,seq=0x12f), length 132
06:08:04.432098 IP 192.168.4.100 > 192.168.5.100: ICMP echo reply, id 37188, seq 48, length 64
06:08:05.433440 IP 194.168.10.5 > 194.168.10.4: ESP(spi=0x0c6af04f,seq=0x138), length 132
06:08:05.433945 IP 194.168.10.4 > 194.168.10.5: ESP(spi=0x4654f5bf,seq=0x130), length 132
06:08:05.433945 IP 192.168.4.100 > 192.168.5.100: ICMP echo reply, id 37188, seq 49, length 64
06:08:06.434173 IP 194.168.10.5 > 194.168.10.4: ESP(spi=0x0c6af04f,seq=0x139), length 132
06:08:06.434621 IP 194.168.10.4 > 194.168.10.5: ESP(spi=0x4654f5bf,seq=0x131), length 132
06:08:06.434621 IP 192.168.4.100 > 192.168.5.100: ICMP echo reply, id 37188, seq 50, length 64
06:08:07.435032 IP 194.168.10.5 > 194.168.10.4: ESP(spi=0x0c6af04f,seq=0x13a), length 132
06:08:07.435600 IP 194.168.10.4 > 194.168.10.5: ESP(spi=0x4654f5bf,seq=0x132), length 132
06:08:07.435600 IP 192.168.4.100 > 192.168.5.100: ICMP echo reply, id 37188, seq 51, length 64
LS和RS之间的数据包已经走了ESP隧道,说明配置已经成功了。
如果你细心观察会发现还有没加密的数据(在上面tcpdump抓的包里比较长的那四条),再细心观察还会发现只有收的包会出现没加密的情况,发的包不会出现,这是为什么呢?这是因为linux里NETKEY协议处理ipsec数据包的方式比较特殊,linux会把外层IP头去掉,内层数据(包括真实的IP层+IP数据)解密以后又放到了相应的网口的协议栈,所以抓包的时候又抓到了解密以后的数据包。发包并不会出现这种情况。如果你从物理机抓包(从我的拓扑里看是vmnet4)就不会抓到没加密的数据包了。
还有一点
我看到有很多人写的文章里要在LS和RS里做NAT转换把LC和RC的私网地址分别转成LS和RS的公网地址,千万不要那么干。配置NAT转换的话数据包就不会再走ipsec了,抓一下包就能看到全是明文的。
我不太理解的地方是我把LS和RS的默认路由删掉以后LC和RC之间就没办法通信了,是不是说明内核里没有关于双方私网的信息,那么我们在配置文件/etc/ipsec.d/john_snow里配置了的leftsubnet/rightsubnet是不是没起作用?等有时间看一下代码。
搭建ipse隧道的更多相关文章
- ubantu与CentOS虚拟机之间搭建GRE隧道
Author : Email : vip_13031075266@163.com Date : 2020.01.23 Copyright : 未经同意不得 ...
- 在linux下搭建l2tp隧道
搭一个l2tp隧道,拓扑如下 两台机器是CentOS5,内核选上CONFIG_LEGACY_PTYS选项后自己编译的,l2tp是已经停更的l2tpd-0.69.先在LS上配置IP地址,iptables ...
- [置顶] lvs-tun隧道模式搭建
一.lvs直接路由原理 由于图片还要一张一张上传,可以到下面网站下载我的word版本: http://download.csdn.net/user/y0908105023 补充基础知识: OSI(Op ...
- OVS-----CentOS7上搭建基于Open vSwitch的VxLAN隧道实验
一.关于VXLAN VXLAN 是 Virtual eXtensible LANs 的缩写,它是对 VLAN 的一个扩展,是非常新的一个 tunnel 技术,在Open vSwitch中应用也非常多. ...
- 反向代理搭建隧道,服务器系统为Ubuntu18.04
该文章参考了实验室师兄写的教程,并记录了自己在实操过程中的坑. 1.内网机器配置 假设现在有一台公用服务器和一台内网服务器,现在想通过反向代理的方式来访问内网服务器.假设公用服务器为A,内网服务器为B ...
- 搭建vpn环境:centos7+openvpn
vpn的含义:virtual private network vpn的作用/使用场景:最常见的一个作用,你通过公网来访问某个局域网里的主机/服务,其实就是搭建一个隧道,用公网传递你的数据包,等数据包到 ...
- WebGL 3D 工业隧道监控实战
前言 监控隧道内的车道堵塞情况.隧道内的车祸现场,在隧道中显示当前车祸位置并在隧道口给与提示等等功能都是非常有必要的.这个隧道 Demo 的主要内容包括:照明.风机.车道指示灯.交通信号灯.情报板.消 ...
- DNS隧道 iodns
通过iodns这个工具也能搭建DNS隧道 iodns的优点: 对下行数据不进行编码,速度快 支持多平台 最大16个并发连接 强制密码设定 iodns创建的DNS隧道网段不能喝服务器,客户端同一网段,比 ...
- dns隧道 dns2tcpd
有些网络的防火墙设置只允许端口53的UDP流量,就不能通过tcp搭建隧道,这种情况下我们可以通过UDP搭建DNS隧道,通过搭建一个DNS服务器委派的子域,这个子域因为使我们自己搭建的主机,这时候就可以 ...
随机推荐
- HTTPS建立过程
由于HTTPS建立过程经常忘记,固记录 HTTPS建立流程 客户端发起SSL连接 服务端发送证书(证书中包含了服务端公钥) 客户端根据已有证书判断是否是可信任的(客户端决定是否继续) 服务端要求客户端 ...
- 对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你
对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你 项目背景 我所在的组织项目数量众多,使用的语言和框架也很多,比如Java.ReactNative.C# .NET.A ...
- 发送post请求
题目: http://123.206.87.240:8002/post/ Brup抓包 1.修改Get 为 POST 2.添加 Content-Type: application/x-www-form ...
- 用C、python手写redis客户端,兼容redis集群 (-MOVED和-ASK),快速搭建redis集群
想没想过,自己写一个redis客户端,是不是很难呢? 其实,并不是特别难. 首先,要知道redis服务端用的通信协议,建议直接去官网看,博客啥的其实也是从官网摘抄的,或者从其他博客抄的(忽略). 协议 ...
- jmeter的用途
1.可以测接口 2.测试连数据库 3.可以进行压测 4.可部署分布式
- 面向对象--继承-通过super()来调用父类方法
super()的使用 问题: class Master(object): def __init__(self): self.kongfu = "古法煎饼果子配方" # 实例变量,属 ...
- Unit4:碎片
基本使用 动态调用 碎片和活动 碎片周期
- CentOS中rpm和yum到底有什么区别?
2020/5/19 ( Linux 软件安装的学习链接:http://c.biancheng.net/view/814.html ) 一.rpm 是什么? rpm 全称 Red-Hat Pa ...
- html+css入门基础案例之页面设计
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 分别用canvas和css3的transform做出钟表的效果
两种方式实际上在js上的原理都是一样的.都是获取时间对象,再获取时间对象的时分秒,时分秒乘以其旋转一刻度(一秒.一分.一小时)对应的角度.css3中要赋值于transform:rotate(角度),c ...