本文介绍使用 StrongSwan 搭建 VPN 的过程,适合有一定 linux 基础的用户。
本文使用的服务器
1CPU,1G, vps" target="_blank" rel="noopener noreferrer" style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(255, 0, 0); text-decoration-line: none;">优惠码
CentOS 8.3
StrongSwan 5.8.2
StrongSwan 简介
StrongSwan 是基于 OpenSource IPsec 的 VPN 解决方案,官方网站:https://www.strongswan.org/ ,如果无法访问请使用科学上网,原因你懂的。
本文描述从一个初始系统开始逐步完成搭梯的过程。
一,准备阶段
以 root 用户登录
安装 epel 源
1 | dnf install epel-release |
更新系统
1 | dnf update |
安装必备软件
1 2 3 4 5 | dnf install nano wget nginx certbot iptables-services crontab #nginx开机启动 systemctl enable nginx #启动nginx systemctl restart nginx |
二,申请 ssl 证书
StrongSwan IPsec IKEv2 连接需要用到服务器证书,用于验证服务器身份。由于自签发证书不受操作系统信任,我们需要申请 Let’s Encrypt 免费证书。
申请证书需要有域名,提前将域名解析到你的vps地址。
1 2 3 4 5 | #在web根目录创建临时目录 mkdir -p /usr/share/nginx/html/.well-known/acme-challenge #--webroot 参数:指定使用临时目录的方式. -w 参数:指定后面-d 域名所在的根目录, 如果一次申请多个域的, 可以附加更多 -w...-d... 这段. certbot certonly --webroot --email xxx@xxx.com -w /usr/share/nginx/html -d xx.xxx.com |
三,安装 strongswan
1 2 3 | dnf install strongswan systemctl enable strongswan systemctl restart strongswan |
配置strongswan
在5.8版本之前,strongswan 默认使用 ipsec.conf 配置文件,之后改用 swanctl.conf 配置。网上充斥着大量老的配置方式,确很少能看到基于 swanctl 配置的。
编辑配置文件
1 | nano /etc/strongswan/swanctl/conf.d/xx.xxx.com.conf |
写入以下配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | connections { ikev2-eap-mschapv2 { version = 2 unique = never rekey_time = 0s fragmentation = yes dpd_delay = 60s send_cert = always pools = ipv4-addrs, ipv6-addrs proposals = aes256-sha256-prfsha256-modp2048, aes256gcm16-prfsha384-modp1024, default local_addrs = %any local { certs = cert.pem id = xx.xxx.com } remote { auth = eap-mschapv2 eap_id = %any } children { ikev2-eap-mschapv2 { local_ts = 0.0.0.0/0,::/0 rekey_time = 0s dpd_action = clear esp_proposals = aes256-sha256, aes128-sha1, default } } } } pools { ipv4-addrs { addrs = 10.10.0.0/24 dns = 8.8.8.8,1.1.1.1 } ipv6-addrs { addrs = fec1::0/24 dns = 2001:4860:4860::8888,2606:4700:4700::1111 } } secrets { private-xxx { file = privkey.pem } eap-user1 { id = user1 secret = "123456" } } |
高亮部分中的 xx.xxx.com 替换为上面申请证书时用的域名, private-xxx 中的 xxx 随意,不要有符号,eap-user1 和 id = user1 中的 user1 替换为你想登录vpn使用的账号,secret = “123456” 改为你的密码。
如需添加多个用户,复制 eap-user1 { … } 段粘贴到下面,按上面规则设置新的用户名和密码即可。
ctrl + w 退出编辑,会询问你是否保存,按 y,再回车保存。
安装证书,创建证书软链接到 strongswan 的对应目录。
1 2 3 | ln -s /etc/letsencrypt/live/xx.xxx.com/cert.pem /etc/strongswan/swanctl/x509/cert.pem ln -s /etc/letsencrypt/live/xx.xxx.com/privkey.pem /etc/strongswan/swanctl/private/privkey.pem ln -s /etc/letsencrypt/live/xx.xxx.com/chain.pem /etc/strongswan/swanctl/x509ca/ca.pem |
证书安装完成
重启服务
1 | systemctl restart strongswan |
开启内核转发
1 | nano /etc/sysctl.conf |
用下面内容替换配置文件中同名的项,如果没有则新增。
1 2 3 4 5 6 7 | #开启内核ipv4转发 net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 #开启内核ipv6转发 net.ipv6.conf.all.forwarding = 1 |
重新加载配置
1 | sysctl -p |
配置防火墙
1 | nano /etc/sysconfig/iptables |
在合适的位置添加以下规则。高亮标示部分的内容与顺序必需与下面一样。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # sample configuration for iptables service # you can edit this manually or use system-config-firewall # please do not ask us to add additional ports/services to this default configuration *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A POSTROUTING -s 10.10.0.0/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -i eth0 -p ah -j ACCEPT -A INPUT -i eth0 -p esp -j ACCEPT -A INPUT -i eth0 -p udp -m udp --dport 500 -j ACCEPT -A INPUT -i eth0 -p udp -m udp --dport 4500 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -i eth0 -m policy --dir in --pol ipsec -j ACCEPT -A FORWARD -d 10.10.0.0/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT |
ctrl + w 保存,按 y,回车确认。
重启防火墙,使规则生效。
1 | systemctl restart iptables |
由于 Let’s Encrypt 证书只有90天有效期,为避免过期,需要启用自动续期。自动续期由定时任务完成。
编辑定时任务配置
1 | nano /etc/crontab |
写入下面红色内容,这段的意思是每天3点运行 certbot renew 命令给证书续期,如果续期成功则重启 nginx 和 strongswan 服务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 0 3 * * * root certbot renew --quiet --deploy-hook "systemctl restart nginx && systemctl restart strongswan" |
ctrl + w 退出,按 y,回车确认。
加载定时任务配置,使之生效。
1 | crontab /etc/crontab |
到此,服务端配置完成。下面设置各客户端。
四,配置客户端
Win10 客户端设置
开始 -> 设置 -> 网络和Internet -> VPN -> 添加vpn连接
供应商选 “windows 内置”
连接名称随意
服务器名称或地址填域名 “xx.xxx.com”
vpn类型选 “IKEv2”
登录信息的类型选 “用户名和密码”
用户名与密码填上面设置的
保存,点击 “连接”,如无意外,vpn已经连上了,并且可以访问外网。
IOS 客户端设置
设置 -> 通用 -> VPN -> 添加VPN配置
类型选 “IKEv2”
描述随意
服务器填 “xx.xxx.com”
远程id填 “xx.xxx.com”
用户鉴定选 “用户名”
用户名填 “user1”
密码填 “123456”
完成
点选刚添加的配置,打开vpn开关,如无意外可访问外网。
Android 客户端设置
需下载安装客户端程序,前往官网下载 最新版 apk 程序。
设置过程同上面大同小异。
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://www.hqyman.cn/post/8595.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~