ubuntu使用strongswan搭建IpsecVPN

安装strongSwan

安装strongswan,安装成功后是使用自签证书,客户端连接前需要导入自签的ca证书到设备中。

# apt-get update && sudo apt-get upgrade
# apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins libtss2-tcti-tabrmd0 -y

生成服务器密钥和证书

1、创建 IPsec 私钥

# ipsec pki --gen --size 4096 --type rsa --outform pem > /etc/ipsec.d/private/ca.key.pem

2、创建并签署根证书。确保将 CN 配置的值替换为自己想要的 StrongSwan VPN 服务器名称

# --lifetime 3650 配置将证书的生命周期设置为 3650 天或大约十年。
# ipsec pki --self --in /etc/ipsec.d/private/ca.key.pem --type rsa --dn "CN=ares" --ca --lifetime 3650 --outform pem > /etc/ipsec.d/cacerts/ca.cert.pem

3、生成 StrongSwan VPN 服务器的私有证书

# ipsec pki --gen --size 4096 --type rsa --outform pem > /etc/ipsec.d/private/server.key.pem

4、生成主机服务器证书,指定网关服务器的 IPv4 地址

# ipsec pki --pub --in /etc/ipsec.d/private/server.key.pem --type rsa | ipsec pki --issue --lifetime 3650 --cacert /etc/ipsec.d/cacerts/ca.cert.pem --cakey /etc/ipsec.d/private/ca.key.pem --dn "CN=123.123.123.123" –san=”123.123.123.123” --san="123.123.123.123" --flag serverAuth --flag ikeIntermediate --outform pem > /etc/ipsec.d/certs/server.cert.pem

# –issue, –cacert 和 –cakey 就是表明要用刚才自签的 CA 证书来签这个服务器证书

参数含义:

–self 表示自签证书
–in 是输入的私钥
–dn 是判别名
–ca 表示生成 CA 根证书
–lifetime 为有效期, 单位是天
C 表示国家名,同样还有 ST 州/省名,L 地区名,STREET(全大写) 街道名
O 组织名称
CN 友好显示的通用名

最终证书文件:

/etc/ipsec.d/private/ca.key.pem	VPN 主机网关私钥
/etc/ipsec.d/cacerts/ca.cert.pem	VPN 主机网关根证书
/etc/ipsec.d/private/server.key.pem	VPN 主机网关私钥
/etc/ipsec.d/certs/server.cert.pem	VPN 主机网关服务器证书

StrongSwan 配置

1、开始linux内核转发

# tail -6 /etc/sysctl.conf 

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# sysctl -p

2、配置StrongSwan 文件

# cat /etc/ipsec.conf
config setup
        charondebug="ike 1, knl 1, cfg 0, net 1"
        strictcrlpolicy=no
        uniqueids=yes  # 如果同一个用户在不同的设备上重复登录,yes 断开旧连接,创建新连接;no 保持旧连接,并发送通知; never 同 no, 但不发送通知.
        cachecrls=no 
conn ipsec-ikev2-vpn   #XAUTH认证需要
      auto=add			# 当服务启动时, 应该如何处理这个连接项,add 添加到连接表中
      compress=no		# 是否启用压缩, yes 表示如果支持压缩会启用
      type=tunnel	
      keyexchange=ikev2
      fragmentation=yes
      forceencaps=yes
      dpdaction=clear	# 当意外断开后尝试的操作
      dpddelay=300s		# dpd时间间隔
      rekey=no			# 不自动重置密钥
      left=%any			# 服务器端标识,可以是魔术字 %any,表示从本地ip地址表中取
      leftid=123.13.12.1		# 服务器端ID标识,这里为你的公网ip,或者@你的域名
      leftcert=server.cert.pem	# 服务器端证书
      leftsendcert=always		# 是否发送服务器证书到客户端
      leftsubnet=0.0.0.0/0
      right=%any		# 客户端标识,%any表示任意
      rightid=%any
      rightauth=eap-mschapv2			#KEv2 EAP(Username/Password)
      rightsourceip=192.168.137.0/24 	 # 客户端IP地址分配范围
      rightdns=223.5.5.5,223.6.6.6		# DNS
      rightsendcert=never				# 客户端不发送证书
      eap_identity=%identity			# 指定客户端eap id
      ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!			# 密钥交换协议加密算法列表,可以包括多个算法和协议。
      esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!	# 数据传输协议加密算法列表,对于IKEv2,可以在包含相同类型的多个算法(由-分隔)
conn xauth_psk    #PSK认证需要
      keyexchange=ikev2		# 使用 IKEv2
      left=%defaultroute
      leftauth=psk			# 服务器校验方式
      leftsubnet=0.0.0.0/0
      right=%any
      rightauth=psk
      rightsourceip=192.168.137.0/24
      auto=add
conn IKEv2-pubkey	#RSA认证
    # 服务器端根证书 DN 名称
    leftca="CN=ares"
    # 服务器证书,可以是 PEM 或 DER 格式
    leftcert=server.cert.pem
    # 不指定客户端证书路径
    # rightcert = <path>
    # 指定服务器证书的公钥
    leftsigkey=server.pub.pem
    # rightsigkey = <raw public key> | <path to public key>
    # 是否发送服务器证书到客户端
    leftsendcert=always
    # 客户端不发送证书
    rightsendcert=never
    # 服务端认证方法,使用证书
    leftauth=pubkey
    # 客户端认证使用 EAP 扩展认证,貌似 eap-mschapv2 比较通用
    rightauth=eap-mschapv2
    # 服务端 ID,可以任意指定,默认为服务器证书的 subject,还可以是魔术字 %any,表示什么都行
    leftid=%any
    # 客户端 id,任意
    rightid=%any

3、创建身份验证和访问机密

# cat /etc/ipsec.secrets 
# This file holds shared secrets or RSA private keys for authentication.

# RSA private key for this host, authenticating it to any other host
# which knows the public part.

: RSA "/etc/ipsec.d/private/server.key.pem"
: PSK "1234567890"    
: XAUTH "123456"
test : EAP "test123"

4、启动服务

# ipsec restart

5、添加iptables转发,添加后才可以通外网

# iptables -t nat -A POSTROUTING -s 192.168.137.0/24 -o ens160 -j MASQUERADE
# 网段为ipsec.conf中配置的客户端网段,ens160为网卡名称

客户端测试

需要导入ca证书。

posted @ 2023-11-29 14:49  我是一条最咸的咸鱼  阅读(4341)  评论(0编辑  收藏  举报
返回顶部