搭建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服务器委派的子域,这个子域因为使我们自己搭建的主机,这时候就可以 ...
随机推荐
- 电子邮箱有哪些隐藏技能,读懂了效率提升N倍!
很多人将邮箱作为常见的通讯工具,然而,大部分职场人只了解其五分之一的功能.电子邮箱还有很多隐藏技能,身为商务精英的你,必须往下看看哦!今天跟随TOM邮箱小编导,来挖掘下邮箱的潜藏技能吧~ 作为经常外出 ...
- python基础 画图
python 画图 matplotlib 库只保存图片,不显示图片? 在导入库时,添加如下代码 import matplotlib matplotlib.use('Agg') 各种 symbol ? ...
- python appium app ui 自动化
1.下载Android-SDK.夜神安卓模拟器.Appium.adb命令执行包并配置环境变量 2.打开夜神 3.打开Appium进行配置,配置如下 4.启动命令,到夜神bin目录下执行 adb con ...
- Django 多页面间参数传递用session方法(Django七)
由一个页面跳转至另一个页面可以有render中携带几个参数,如下:照上例便在跳转到homepage页面后使用传递的四个参数了 但问题是如何在由homepage跳转到其他页面时仍可以使用这四个参数呢?我 ...
- 漏洞扫描工具acunetix12会遇到的问题
1.如果安装好之后,打开工具时显示无法访问,首先去看任务管理器当中,acunetix的服务是否启动了 2.如果忘记了账号密码,可以在安装目录下,双击ChangePassword.exe进行重置密码
- mysql数据库常见问题修改(待补充)
1.修改mysql最大连接数的方法:临时修改:1.使用命令show variables 来查看当前最大连接数 show variables like '%max_connections%'; 使用命令 ...
- element ui 分页记忆checked
<el-table :data="tableData" border ref="multipleTableChannel" @selection-chan ...
- 万字详解TDengine 2.0整体架构设计思路
导读:涛思数据8月3日将TDengine 的集群功能开源,TDengine具有超强的性能和功能,为什么能做到?它到底有哪些技术创新?今将TDengine的整体设计文档分享出来. 1: 数据模型 物联 ...
- Java编程系列文章序言
Java编程系列分为基础编程和高级编程两部分: 其中基础编程包括基础语法如变量和标识符,流程控制等,数组如一维数组二位数组等,及面向对象,异常处理: 高级部分多线程,常用类,注解,Java集合,泛型, ...
- mybatis的dao注入失败
转载自https://blog.csdn.net/hanpenghu/article/details/83897618 springboot maven资源路径配置 resource路径配置, 解决m ...