搭建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服务器委派的子域,这个子域因为使我们自己搭建的主机,这时候就可以 ...
随机推荐
- C# 压缩源文件(导出源文件word文件)
说明 1 : 在webUI 公共类,存放 ZipHelper 类 说明 2 :判断文件路径是否存在,不存在则创建文件夹 说明 3 : 引用类方法,判断压缩文件,返回的,是true/false 引用 ...
- 跟着兄弟连系统学习Linux-【day01】
day01-20200527 p1.unix发展历史 (1960,有一个实验室,三个团队组成,开发了Unix雏形,但是因为没有办法发版,所以就荒废了.这个小组里面有一个人,打游戏的时候 ...
- JVM 中的对象及引用
JVM中对象的创建过程 对象的内存分配 虚拟机遇到一条 new 指令时,首先检查是否被类加载器加载,如果没有,那必须先执行相应的类加载过程. 类加载就是把 class 加载到 JVM 的运行时数据区的 ...
- 20190919-02安装Xshell和CRT远程工具 000 008
Linux远程登录及相关工具介绍 Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器.这时我们就需要远程登录到Linux服务器来管理维护系统. Linux系统中 ...
- 在CentOs7上yum安装redis
在开始安装步骤之前,先把我的CentOs和redis版本号列出来: # 系统/软件 版本号 1 CentOS7 CentOS Linux release 7.2.1511 (Core) 2 redis ...
- 我是如何使用freemarker生成Word文件的?
推荐:亲身体验,数次踩坑,遂撰写此文,以备各位不时之需. 背景 一天,产品经理递给我了一份word报告,我定睛一看 这个文档有大大小小的标题层级,还有排版好的段落.各种一目了然的饼图.走势图,当然还少 ...
- oracle之三手工备份与恢复
手工备份与恢复 2.1 手工备份和恢复的命令 1)备份和还原都使用OS命令,如linux中的cp 2)恢复用sqlplus命令:recover 2.2 备份前要对数据库进行检查: 1) 检查需要备份的 ...
- [LeetCode]438. 找到字符串中所有字母异位词、76. 最小覆盖子串(滑动窗口解决子串问题系列)
题目438. 找到字符串中所有字母异位词 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 说明: 字母异位词指字母相同,但排列不同的字符 ...
- Docker介绍及常用操作演示(一)
Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互 ...
- zookeeper(3) 持久化
zookeeper为了防止,系统宕机或重启导致的数据丢失,会对数据进行定时持久化.有两种持久化方式: 1.为每次事务操作记录到日志文件,这样就可以通过执行这些日志文件来恢复数据. 2.为了加快ZooK ...