ubuntu安装strongswan
ubuntu strongswan
用date查看时间如果时间不对,安装时间调整包
apt-get update && apt-get install -y tzdata
选择Asir和Shanghai,安装完后再看date一般就正确了
1.开始安装
apt-get update
apt-get install strongswan
##下面这个是包含EAP_IDENTITY认证插件,不安装的话认证会失败:EAP_IDENTITY not supported, sending EAP_NAK
apt-get install -y libcharon-extra-plugins
2.编辑/etc/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
# strictcrlpolicy=yes
# uniqueids = no
# Add connections here.
# Sample VPN connections
#conn sample-self-signed
# leftsubnet=10.1.0.0/16
# leftcert=selfCert.der
# leftsendcert=never
# right=192.168.0.2
# rightsubnet=10.2.0.0/16
# rightcert=peerCert.der
# auto=start
#conn sample-with-ca-cert
# leftsubnet=10.1.0.0/16
# leftcert=myCert.pem
# right=192.168.0.2
# rightsubnet=10.2.0.0/16
# rightid="C=CH, O=Linux strongSwan CN=peer name"
# auto=start
# 下面是新加的
conn hk2
keyexchange=ikev2
dpdaction=clear
dpddelay=300s
keyingtries=1
eap_identity="你的连接vpn的用户名"
leftauth=eap-mschapv2
left=%defaultroute
leftsourceip=%config
right=你的vpn服务商提供的地址
rightauth=pubkey
rightsubnet=0.0.0.0/0
rightid=你的vpn服务商提供的ID如pointtoserver.com
rightsendcert=never
type=tunnel
auto=add
3./etc/ipsec.secrets
"你的vpn的用户名(如果没有特殊字符可以不带双引号)" : EAP "你的vpn的密码"
4.要把证书复制一下
cp /etc/ssl/certs/USERTrust_RSA_Certification_Authority.pem /etc/ipsec.d/cacerts/
- 启动
ipsec restart
ipsec up hk2
请注意,这时虽然连上了vpn,strongswan加了一条高优先级的路由规则,将除的本地流量之外的所有请求都转到ipsec隧道了,导致dns解析失败,不说gg了,连baidu都ping不通了。
查看dns
resolvectl status

没有系统级的DNS,网络接口eth0有自己的dns:100.100.2.136 100.100.2.138
root@iZuf6hu0jwys1fu9mrwfktZ:/etc# ip rule list

cat /etc/iproute2/rt_tables

Linux允许使用数字标识路由表(从1到252),而不仅仅是名称。这意味着你可以直接通过数字引用一个路由表,而不必在 /etc/iproute2/rt_tables 文件中定义它的名称。
root@iZuf6hu0jwys1fu9mrwfktZ:/etc# ip route show table 220

strongswan建立的隧道:
ipsec statusall

综上,strongswan加了一条高优先级220的路由规则,将除的本地流量之外的所有请求的源IP都标记为10.24.6.141(图上是10.24.5.107是因为多次编辑,多次启动strongswan,导致ip变了),而源IP都标记为10.24.6.141的流量都会经过ipsec隧道,发送到vpn远端的服务器上,而隧道远端的vpn服务器访问不了阿里云局域网dns(100.100.2.136 100.100.2.138),导致dns解析失败,所以ping任何域名都不行了。
根使用目的不同有不同的解决办法:
目的一:本地访问gg,baidu等
方法一(推荐):
修改/etc/systemd/resolved.conf
添加DNS=8.8.8.8 8.8.4.4
然后 运行下列命令,使其生效
systemctl restart systemd-resolved
方法二:不推荐
1.修改 /etc/resolv.conf(不建议,这是系统生成的文件,ipsec restart之后就恢复原状了),确保新加的两行在nameserver 127.0.0.53之前,先于其执行
nameserver 8.8.8.8 #这是新加的两行之一
nameserver 8.8.4.4 #这是新加的两行之二
nameserver 127.0.0.53
options edns0 trust-ad
search .
修改完之后通过命令查看nslookup 测试dns解析
nslookup www.baidu.com
2.添加路由(注意:ipsec stop之前一定要先删除添加的路由,否则服务器通不了网,只能通过云服务器提供商提供的vnc登录方式登录.我在aliyun服务器上没这步操作。也没问题)
sudo ip route add 0.0.0.0/1 via 10.24.7.112 dev eth0 metric 50
sudo ip route add 128.0.0.0/1 via 10.24.7.112 dev eth0 metric 50
对应的删除语句为
sudo ip route del 0.0.0.0/1 via 10.24.7.112 dev eth0 metric 50
sudo ip route del 128.0.0.0/1 via 10.24.7.112 dev eth0 metric 50
ipsec stop时也需要删除/etc/resolv.conf中新加的下面两行
nameserver 8.8.8.8 #这是新加的两行之一
nameserver 8.8.4.4 #这是新加的两行之二

目的二:客户端通过3proxy代理,访问gg等。而本机并不访问外部网络
- 3proxy里配置如下:
重要说明:external后地址须与strongswan生成的保持一致,否则通过3proxy访问不了,图上的说明错误,事实证明固定IP这种行不通。

2. 删除优先级为220的路由规则(strongswan生成的)
root@iZuf6hu0jwys1fu9mrwfktZ:/etc# ip rule list

ip rule del priority 220
- 增加三个路由规则,使其被220路由表命中,将对应的源IP改成ipsec隧道对应的地址,然后流量就通过ipsec隧道,进而访问外网(如果要删除这些规则的话,只需将add改成del再执行就可)
root@iZuf6hu0jwys1fu9mrwfktZ:~# ip rule add to 8.8.8.8 lookup 220 priority 200
root@iZuf6hu0jwys1fu9mrwfktZ:~# ip rule add to 8.8.4.4 lookup 220 priority 200
root@iZuf6hu0jwys1fu9mrwfktZ:~# ip rule add from 10.24.6.141 lookup 220 priority 200
执行后查看如下
每天8点重启ipsec服务
1.安装cron
gpt-get install -y cron
2.在/目录下(随便哪个目录)编写 restart_ipsec.sh
ipsec restart
sleep 8
ipsec up hk2
3.赋给执行权限
chmod +x restart_ipsec.sh
4.将当前用户的 crontab 列表 和 一条新的定时任务 合并,然后重新写入 crontab
(crontab -l 2>/dev/null; echo "0 8 * * * /restart_ipsec.sh >> /var/log/ipsec_cron.log 2>&1") | crontab -
5.启动cron
service cron start
6.查看cron是否启动
ps aux | grep cron
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)