安装环境:
- 两台具有公网 IP 的 VPS A 和 B,其中至少有一台拥有独立 IP ,并且另一台如果是 NAT VPS 则需要内外映射端口一致,假设 A 的公网 IP 为 1.1.1.1,B 的公网 IP 为 2.2.2.2
- 设定隧道 A 端内网 IP 为 10.0.0.1,B 端内网 IP 为 10.0.0.2
- A、B 两台机器系统为 Linux 发行版 Debian 系列,教程使用系统为 Debian 10
- 关闭防火墙和 SELinux
- 尽可能纯净的镜像,教程均采用公有云(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 系列教程,如有问题,欢迎评论留言,如果有被帮助到,请点一个赞,或者分享这篇文章,十分感谢!
评论前必须登录!
注册