技术分享

IPSec Over GRE 隧道教程 Redhat 系列篇

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

谷歌一下,你就知道
  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 发行版 Redhat 系列,教程使用系统为 CentOS 8.3
  4. 关闭防火墙和 SELinux
  5. 尽可能纯净的镜像,教程均采用公有云(Ucloud)的公共镜像

安装环境

配置 GRE 隧道

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

安装常用所需软件

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

CentOS 7.x

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

启用 ip_gre 模块

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

调整内核参数

echo "net.ipv4.conf.all.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

CentOS 8.x 因为网络配置的更改,这里提供了两种方案

方案1(Redhat官方提供的教程,推荐使用该方案):

在 A 机器执行

nmcli connection add con-name gre1 ifname gre1 type ip-tunnel ip-tunnel.mode gre remote [B 机器公网 IP]
nmcli connection modify gre1 ipv4.addresses '10.0.0.1/24'
nmcli connection modify gre1 ipv4.method manual
nmcli connection up gre1

在 B 机器执行

nmcli connection add con-name gre1 ifname gre1 type ip-tunnel ip-tunnel.mode gre remote [A 机器公网 IP]
nmcli connection modify gre1 ipv4.addresses '10.0.0.2/24'
nmcli connection modify gre1 ipv4.method manual
nmcli connection up gre1

方案2(由于 network-scripts 即将被 Redhat 淘汰,而且重启后需要手动启动 GRE 和 IPSec 的配置 ,不推荐;CentOS 7.x 请使用该方案):

在 A 机器上新增并编辑 /etc/sysconfig/network-scripts/ifcfg-gre1 网络配置文件,加入以下内容并保存

DEVICE=gre1
BOOTPROTO=none
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=2.2.2.2	# B 机器公网 IP
PEER_INNER_IPADDR=10.0.0.2	# B 机器GRE内网地址
MY_INNER_IPADDR=10.0.0.1	# A 机器GRE内网地址

同样在 B 机器上新增并编辑 /etc/sysconfig/network-scripts/ifcfg-gre1 网络配置文件,加入以下内容并保存

DEVICE=gre1
BOOTPROTO=none
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=1.1.1.1	# A 机器公网 IP
PEER_INNER_IPADDR=10.0.0.1	# A 机器GRE内网地址
MY_INNER_IPADDR=10.0.0.2	# B 机器GRE内网地址

CentOS 8.x 启动 GRE 隧道

dnf install -y network-scripts
ifup gre1

CentOS 7.x 启动 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 环境

dnf install -y libreswan

CentOS 7.x

yum install -y libreswan

创建 Key

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 、B 机器上新建文件 /etc/ipsec.d/gre.conf,加入以下内容并保存,两边机器可以用同一个文件,系统会自动判断自己是左边右边。

conn gre1
	leftid=@left.host
	left=10.0.0.1	# A 机器 GRE 内网 IP
	leftrsasigkey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....	# A 机器保存的结果
	rightid=@right.host
	right=10.0.0.2	# B 机器 GRE 内网 IP
	rightrsasigkey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....	# B 机器保存的结果
	authby=rsasig
	auto=start

启动并设置 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 系列和 Debian 系列教程基本相同,只是 CentOS 8 的命令有些地方做了改动,同时精简了在 Debian 系列中的部分步骤,教程总体都不难,弄明白一个系列之后,例外系列的基本命令也差不了多少;最后还是那句话,如有问题,欢迎评论留言,如果有被帮助到,请点一个赞,或者分享这篇文章,十分感谢!

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

发表评论

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

相关推荐