技术分享

IPSec Over GRE 隧道教程 Debian 系列篇

教程均来自互联网缝合而成,均为亲自安装测试后发布

百度一下,你就知道

安装环境:

  1. 两台具有公网 IP 的 VPS A 和 B,其中至少有一台拥有独立 IP ,并且另一台如果是 NAT VPS 则需要内外映射端口一致,假设 A 的公网 IP 为 1.1.1.1,B 的公网 IP 为 2.2.2.2
  2. 设定隧道 A 端内网 IP 为 10.0.0.1,B 端内网 IP 为 10.0.0.2
  3. A、B 两台机器系统为 Linux 发行版 Debian 系列,教程使用系统为 Debian 10
  4. 关闭防火墙和 SELinux
  5. 尽可能纯净的镜像,教程均采用公有云(Ucloud)的公共镜像

配置 GRE 隧道

在 A、B 机器上分别执行以下命令

安装常用所需软件

apt install -y vim wget curl net-tools tcpdump mtr

启用 ip_gre 模块

echo "ip_gre" >> /etc/modules
modprobe ip_gre

调整内核参数

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.accept_redirects = 0" >> /etc/sysctl.conf
sysctl -p

编辑 A 上的 /etc/network/interfaces 文件,加入以下内容并保存

auto gre1
iface gre1 inet tunnel
address 10.0.0.1
netmask 30
mode gre
endpoint 2.2.2.2	# B 机器公网 IP
ttl 64

同样编辑 B 上的 /etc/network/interfaces 文件,加入以下内容并保存

auto gre1
iface gre1 inet tunnel
address 10.0.0.2
netmask 30
mode gre
endpoint 1.1.1.1	# A 机器公网 IP
ttl 64

启动 GRE 隧道

ifup gre1

测试 GRE 隧道

在 A 机器上测试 GRE 隧道通讯

ping 10.0.0.2	# B 机器 GRE 内网 IP

能 ping 通即为成功

在 B 机器上测试 GRE 隧道通讯

ping 10.0.0.1	# A 机器 GRE 内网 IP

能 ping 通即为成功

配置 IPSec

在 A、B 机器上分别执行以下命令

安装 IPSec 环境并创建 Key

apt install -y libreswan
ipsec initnss
ipsec newhostkey --output /etc/ipsec.d/gre.secrets

在 A 机器上执行以下命令

查询所有 IPSec Key

ipsec showhostkey --list

结果应显示为:< 1> RSA keyid: xxxxxxxxx ckaid: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

记下 keyid ,执行以下命令,并保存执行后获得的结果

ipsec showhostkey --left --rsaid [keyid]

结果应为:leftrsasigkey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx….

在 B 机器上执行以下命令

查询所有 IPSec Key

ipsec showhostkey --list

结果应显示为:< 1> RSA keyid: xxxxxxxxx ckaid: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

记下 keyid ,执行以下命令,并保存执行后获得的结果

ipsec showhostkey --right --rsaid [keyid]

结果应为:rightrsasigkey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx….

在 A 机器上执行以下命令

在 A 机器上新建文件 /etc/ipsec.d/gre.conf,加入以下内容并保存

config setup
	protostack=netkey
conn gre1
	left=10.0.0.1	# A 机器 GRE 内网 IP
	right=10.0.0.2	# B 机器 GRE 内网 IP
	authby=rsasig
	leftrsasigkey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....	# A 机器保存的结果
	rightrsasigkey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....	# B 机器保存的结果
	auto=start

在 B 机器上执行以下命令

在 B 机器上新建文件 /etc/ipsec.d/gre.conf,加入以下内容并保存

config setup
	protostack=netkey
conn gre1
	left=10.0.0.2	# B 机器 GRE 内网 IP
	right=10.0.0.1	# A 机器 GRE 内网 IP
	authby=rsasig
	leftrsasigkey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....	# B 机器保存的结果
	rightrsasigkey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....	# A 机器保存的结果
	auto=start

在 A、B 机器上分别执行以下命令

启动并设置 IPSec 的开机自启

systemctl enable ipsec
systemctl start ipsec

增加并启用 IPSec 规则

ipsec auto --add gre1
ipsec auto --up gre1

上面两条命令只需首次安装执行,执行后重启 IPSec 服务或者重启服务器均不需要执行上方两条命令

检查 IPSec

在 A 机器开启 tcpdump 监听 ESP 数据包

tcpdump -n -i gre1 esp or udp port 500 or udp port 4500

在 B 机器 Ping A 机器的 GRE 内网 IP

ping 10.0.0.1

在 A 机器查看监听数据,如果发现有 ESP 数据包通过,则加密成功

在 B 机器监听,A 机器 Ping 如果也有ESP包通过,则成功

总结

教程还是相对比较简单的,稍后出 Redhat 系列教程,如有问题,欢迎评论留言,如果有被帮助到,请点一个赞,或者分享这篇文章,十分感谢!

怡夏
我爱她,仅此而已
查看“怡夏”的所有文章 →

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

相关推荐