环境
Ubuntu 22.04
Debian 11
strongSwan 5.9.14
Ubuntu 22.04 本地
本地公网IP:使用域名"本地.yudelei.com"
Ubuntu 私网IP、内网IP:192.168.2.54,192.168.2.0/24
Ubuntu 环回IP、IPSec Tunnel 隧道端口IP:192.168.81.1/32
Ubuntu GRE Tunnel 隧道端口IP:192.168.83.1/32
Debian 11 云
云上公网IP:使用域名"阿里云.yudelei.com"
Debian 私网IP、内网IP:172.30.88.176,172.30.80.0/20(虚拟交换机网段)
Debian 环回IP、IPSec Tunnel 隧道端口IP:192.168.82.1/32
Debian GRE Tunnel 隧道端口IP:192.168.83.2/32
描述
两台虚拟机构建 IPSec。
使用环回IP构建 IPSec Tunnel 隧道。
IPSec 使用 strongSwan,部分参数可:IKEv2 PSK 预共享密钥 Site-to-Site 站点到站点
两台虚拟机构建 GRE over IPSec。
GRE 隧道启用多播支持。
GRE 两端设置 pointoponit 点对点模式。
云上服务器将拿到本地主机的内网IP。
步骤
两台机器自带防火墙全关闭或未安装,忽略防火墙左右操作。
若有,注意开放端口,安全组,转发等。
本地路由器开放端口映射:
udp:500,4500
相同操作
apt update -y
apt -y install libgmp3-dev bzip2 make gcc pkg-config libsystemd-dev
wget https://download.strongswan.org/strongswan-5.9.14.tar.bz2
tar xjf strongswan-5.9.14.tar.bz2 && cd strongswan-5.9.14/
./configure --prefix=/usr --sysconfdir=/etc --enable-systemd
make && make install
echo ": PSK \"预共享密钥"" >> /etc/IPSec.secrets
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
strongSwan IPSec 配置
使用环回IP进行创建 IPSec 隧道。
若要只允许 gre 协议通过,需更改leftsubnet
与rightsubnet
,在后追加[gre]
。nano /etc/ipsec.conf
Ubuntu ipsec.conf
config setup
charondebug="all"
uniqueids=yes
conn vpn01
ikelifetime=180m
authby=psk
auto=start
compress=no
type=tunnel
keyexchange=ikev2
left=192.168.2.54 # 注意修改
leftsubnet=192.168.81.1/32 # 注意修改 环回网段
leftid=本地.yudelei.com # 注意修改
leftauth=psk
leftsendcert=no
right=阿里云.yudelei.com # 注意修改
rightsubnet=192.168.82.1/32 # 注意修改
rightauth=psk
rightid=阿里云.yudelei.com # 注意修改
fragmentation=yes
rightsendcert=no
forceencaps=yes
ike=aes256-sha256-modp1536!
esp=aes256-sha256!
dpdaction=hold
closeaction=restart
keyingtries=%forever
Debian ipsec.conf
config setup
charondebug="all"
uniqueids=yes
conn vpn01
ikelifetime=180m
authby=psk
auto=start
compress=no
type=tunnel
keyexchange=ikev2
left=172.30.88.176 # 注意修改
leftsubnet=192.168.82.1/32 # 注意修改
leftid=阿里云.yudelei.com
leftauth=psk
leftsendcert=no
right=本地.yudelei.com # 注意修改
rightsubnet=192.168.81.1/32 # 注意修改
rightauth=psk
rightid=本地.yudelei.com # 注意修改
fragmentation=yes
rightsendcert=no
forceencaps=yes
ike=aes256-sha256-modp1536!
esp=aes256-sha256!
dpdaction=hold
closeaction=restart
keyingtries=%forever
运行 strongSwan IPSec
systemctl enable strongswan-starter.service
systemctl start strongswan-starter.service
GRE 配置
创建 GRE 隧道,与 IPSec 隧道 IP 两端一致。
创建 GRE 隧道IP,设置对端IP(pointopoint),使用 gre1 设备。
设置允许多播,并启动隧道。
Ubuntu
ip tunnel add gre1 mode gre local 192.168.81.1 remote 192.168.82.1
ip addr add local 192.168.83.1 remote 192.168.83.2 brd 255.255.255.255 dev gre1
ip link set gre1 multicast on
ip link set gre1 up
Debian
ip tunnel add gre1 mode gre local 192.168.82.1 remote 192.168.81.1
ip addr add local 192.168.83.2 remote 192.168.83.1 brd 255.255.255.255 dev gre1
ip link set gre1 multicast on
ip link set gre1 up
配置路由
Ubuntu
Ubuntu 位于路由器之后,其他主机默认路由为路由器,需配置路由器静态路由。
目的地址:172.30.80.0
子网掩码:255.255.240.0
网关:192.168.2.54
若云端服务器需获取本地访问主机的内网IP,需设置 NAT规则,NAT过滤:对去往172.30.80.0/20段的IP 不做 NAT。
ip route add 172.30.80.0/20 dev gre1
Debian
ip route add 192.168.2.0/24 dev gre1
提示
至此 GRE over IPSec 已完成。
注意
配置开机脚本使 GRE 隧道开机启动。
配置定时 Ping 脚本保活 GRE Keepalive。