Update 2021-11-06: 1.strongswan.org 被墙了,功夫网威武。2.更正了同一用户使用不同终端登录时会挤掉已有的VPN连接的问题。
要爬墙为啥想不开要用VPN?代理服务器他不香吗?代理比VPN不知道高到哪里去了。用代理的话国内国外能分流,配置一般来说只要改一个配置文件就可以即开即用。用VPN的话,首先国内外分流就特别麻烦,不省VPS流量,访问国内网站或者想打个国服还得忍受延迟爆表;之后,VPN报文的特征那么明显;功夫网想墙掉是分分钟的事情;最后,VPN的配置起来比代理难多了,要配置个能用的VPN你要考虑好IP地址,还要改内核设置使得客户端连上VPN后正常爬墙。只为了爬墙用代理就能轻松爬,你为什么想不开要用VPN?
背景
在我这里ss和v2ray真的不香,所以我被迫捡起来了VPN的传统艺能。配好了IPsec VPN发现IPsec意外地香。同一台服务器上代理全部趴窝的时候,连上IPsec VPN看油管却能看4K@60fps的视频毫无中断问题。
虽然IPsec VPN确实爽了,但是还是有个地方很不如意:照以往经验配置出来的IPsec VPN只支持IPv4网络,不支持IPv6。在工信部大力推动IPv6部署的情况下,目前的VPN配置已经跟不上了时代的潮流,VPN只支持IPv4,IPv6的流量就仍然是直连的,没法走VPN翻过高墙。为啥要大力推进IPv6部署啊?不就是因为v6的墙建好了。 有双栈网络接入且只有IPv4的流量能走VPN的情况下,要访问一个被墙的网站,如果被墙的域名有AAAA的记录且客户端这里得到了正确的IPv6结果,又由于IPv6是直连的,收到来自功夫网的RST包警告便是必然的事情。
要解决这个问题有两种思路,第一种思路是关掉操作系统的IPv6支持。 不更改家庭网关设置的情况下,电脑上操作起来还是很容易的,windows和linux都能方便地关掉IPv6,只有v4地址也就不存在v6流量走不了VPN的问题了。但是手机上想全关掉IPv6的支持不容易,以Android为例,Android确实可以关掉4G网络的IPv6支持,选项藏的很深而已(Settings -> Connections -> Mobile networks -> Access Point Names -> 选择接入点 -> 把 APN Protocol 和 APN roaming protocol 都设成IPv4),但是碰到支持IPv6的wifi接入点怎么办呢?对不起,Android不支持。当wifi接入点的设置不是自己能控制的时候这就很难受。第二种思路,是在连上VPN的时候让VPN服务器给客户端分配一个能联网的IPv6地址。 这样IPv6的流量就也可以走VPN了,这也是本文要讨论的问题。
怎样用strongSwan搭建IPsec VPN的教程网上有很多。之前我是照 openSUSE wiki 上 MargueriteSu 大佬写的教程学会怎样配置的。推荐看一下,能学到许多东西。然而教程的完成日期已经是7年前了,一些情况和现在不一样。还有其它的教程,它们都告诉你需要去修改ipsec.conf
和ipsec.secrets
这两个配置文件来配置VPN,且对IPv6的情况只字未提。在防火墙和配置证书的部分和现在的情况也不一样,例如MargueriteSu的教程里还在用SuSEFirewall2,可是openSUSE已经完全弃用了SuSEFirewall投奔firewalld;有的发行版,例如Ubuntu,预置的strongSwan包也是不带生成证书的功能的。找现成的教程无果,去翻了strongSwan项目的主页,我惊奇地发现strongSwan的示例里已经没有这两个文件了,它已经过时了,取而代之的是单个文件swanctl.conf
。为了跟上潮流,遇到问题的时候能在官方处得到启发,当然也要用新的配置方式。怎样用新的配置文件配置VPN也是本文要讨论的话题。
目标
这里要达到的目标是:在VPS上配置一个通过IPv4和IPv6地址都能访问的IPsec VPN。通过这两种方式连接到VPN后,客户端都能同时获取到能联网的IPv4和IPv6地址。VPN服务端通过合法的证书来表明服务器的正确身份,客户端的认证协议采用EAP-MSCHAPv2。Windows自带的VPN客户端和Android的strongSwan APP都能连接上VPN服务器且能正常上网。
VPN服务器能给客户端分配能用的IPv6地址,IPv6流量不能走VPN的问题也就迎刃而解了。
环境
我的VPS用的linux发行版是openSUSE Tumbleweed。写文章的时候发行版预置的strongSwan版本是5.8.4。
既然我们要让VPN客户端获得IPv6地址,那么VPS有IPv6地址便是实践这篇文章所述事情的一个必要条件。VPS没IPv6地址,不能访问v6网络,那还怎么给客户端v6地址呢?另外,你的VPS获得的IPv6地址最好是/64的,并且支持SLAAC,也就是说后半部分64位的分配权在你手里,你的VPS可以在后面的64位后缀里任意选一个。这样我们给VPN客户端分配IPv6地址会更方便一些。如果不明白,可以向你的VPS运营商咨询,这些都是服务商需要给你解决的问题。
假如VPS服务商给你的IPv6地址是/128的,也就是你只拥有一个IPv6地址的分配权,那就不好玩了,必须得用NAT64这种没有办法的办法。这不在本文的讨论范围之内。
配置VPN连接
配置IPv4环境下的VPN服务器
在IPv4环境下配置VPN没什么好说的,网上的教程完全可以用来参考。这里也几乎就是把其它教程的意思重复一遍。最大的问题是如何把ipsec.conf
和ipsec.secrets
转成swanctl.conf
里面的语法格式。
安装软件
用zypper命令安装strongSwan:
zypper in strongswan
因为用的是suse,所以想要gui的话可以去YaST控制台的Software Management界面搜,具体过程不赘述。
配置服务端证书
之前说了,VPN服务端这边需要一个有效的证书来表明服务端的身份。
你有自己的域名的话,你可以把你手上的域名解析到你的vps上,然后向letsencrypt申请SSL证书。和架网站不一样,这里解析域名最好是IPv4和IPv6分开解析。例如把v4地址解析到gateway.your.domain
,v6地址解析到gateway-v6.your.domain
。理由不仅有方便区分,还有强国的IPv6路由配置比较奇葩,使用IPv6地址连接时很容易碰到延迟爆炸连线质量极差的情况。申请LetsEncrypt证书的环节我这里直接用了EFF提供的certbot脚本。
安装certbot:
zypper in python3-certbot
打开防火墙:
firewall-cmd --add-service http firewall-cmd --add-service https firewall-cmd --permanent --add-service http firewall-cmd --permanent --add-service https
用Certbot申请证书:
certbot run --domain gateway.your.domain --domain gateway-v6.your.domain
证书申请成功的时候,脚本会告诉你申请过来的合法证书存放的位置,类似于这样:/etc/letsencrypt/live/gateway.your.domain/fullchain.pem
。之后配置VPN连接的时候会用上。
因为letsencrypt证书只有三个月的有效期,所以我们需要有个systemd服务和定时器,用来定时检查letsencrypt证书是否过期。风滚草提供了一个包certbot-systemd-timer
帮我们代劳,它会在/usr/lib/systemd/system
目录下安装刚才说的服务和定时器,名字叫certbot-renew
。
zypper in certbot-systemd-timer
假如你用的是别的发行版,你可能需要自己写一个service和timer。service要做的事情很简单,就是调用一下/usr/bin/certbot renew
命令,当然视发行版不同文件路径可能有变化。
解决证书问题,还有个途径是自建一套PKI体系。可以用strongSwan自带的pki功能也可以用OpenSSL,这不在本文的讨论范围内。用OpenSSL这里有篇文章可供参考:
https://jamielinux.com/docs/openssl-certificate-authority/index.html
配置VPN服务端
swanctl.conf
因为ipsec.conf
和ipsec.secrets
被宣告为过时了,所以这里我们在swanctl.conf
里面配置VPN连接。strongSwan wiki里有把设置从这两个文件迁移到swanctl.conf
的教程。这里就照着wiki页面的内容把其他教程里的配置迁移了一下:
include conf.d/*.conf connections { strongswan-win { version = 2 rekey_time = 0 local_addrs = 0.0.0.0 send_certreq = no pools = ip_pool unique = never dpd_delay = 60s encap = yes proposals = aes256-sha384-modp1024,default local { auth = pubkey certs = fullchain.pem } remote { auth = eap-mschapv2 eap_id = %any } children { net1 { local_ts = 0.0.0.0/0 } } } } pools { ip_pool { addrs = 10.0.1.0/24 dns = 208.67.222.222, 208.67.220.220 } } secrets { private_1 { file = "privkey.pem" secret = "" } eap_1 { id_1 = fuckgfw secret = "makevpngreatagain" } }
显然swanctl.conf
分为三个部分,connections
、pools
和secrets
。其中,connections
对应的是ipsec.conf
里的内容;pools
指定了要分配给VPN客户端的虚拟IP地址池的DNS服务器,这里定义了一个名叫ip_pool的IP池;secrets
对应的是ipsec.secrets
文件的内容,以private做前缀的项定义了VPN服务端要使用的服务端证书私钥,eap前缀的项定义了VPN连接要用到的用户名和密码,这里的例子里,用户名是fuckgfw
密码是makevpngreatagain
。
再简单解释下connections栏里的内容:
– version = 2
: 使用IKEv2认证方法。
– rekey_time = 0
: 应对Windows内置的IPsec客户端的BUG,见MargueriteSu写的教程。
– local_addrs = 0.0.0.0
: VPN服务端要监听服务端所有可用的IP地址。
– send_certreq = no
: 是否要求客户端发送证书,这里我们要求客户端使用用户名密码验证,所以设为no。
– pools = ip_pool
: 使用名为ip_pool的地址池用来给VPN客户端分配地址。
– unique = never
: 永远不把已经登录的用户踢下线,即使新连接的VPN客户端发送了INITIAL_CONTACT报文。这项默认的设定值是”no”,也就是服务端只有收到INITIAL_CONTACT报文的时候才会把已建立连接的用户踢下来。但是不同客户端的行为会有差异,例如windows自带的VPN客户端不会发送这个报文,但是strongSwan for Android会发送,导致的结果就是你的Android手机登录VPN时,你电脑的VPN会断线。因此把这个值设成never。
– dpd_delay = 60s
: dpd
的全称是dead peer detection,顾名思义是用来检测VPN客户端是否还在线。这里设定检测的时间间隔为一分钟。
– encap = yes
: 强制把ESP包封装至端口号为4500的的udp包中,无视VPN客户端是否在NAT后面,这可以避免IPsec ESP包被一些错误配置的骨干路由器丢掉。
– proposals = aes256-sha384-modp1024,default
: 指定IPsec连接使用的加密方式。前面的aes256-sha384-modp1024
是为windows客户端量身定制的,这是windows支持的几种IPsec加密方式之一;后面的default
是为其它类型的客户端(例如linux和Android)准备的。
– local
: 指定验证服务器身份的方式,这里设定的方式为服务器出示有效的证书,证书文件名叫fullchain.pem
。
– remote
: 指定客户端身份验证的方式,这里使用了eap-mschapv2。eap_id = %any
表示secrets栏规定的任何EAP身份都有效.
– children
: 配置IPsec SA的行为,我的理解是这里控制了客户端连接上VPN服务器后的一些行为,例如能访问的网段。里面的local_ts就是控制这个的。
strongswan.conf
# strongswan.conf - strongSwan configuration file # # Refer to the strongswan.conf(5) manpage for details # # Configuration changes should be made in the included files charon { load_modular = yes plugins { include strongswan.d/charon/*.conf duplicheck { enable = no } } } include strongswan.d/*.conf
这里只改了一个设置:duplicheck.enable = no
,使得同一套用户凭证可以多终端在线。
启动strongSwan
把之前申请好的letsencrypt证书在swanctl目录下创建软链接,让strongSwan能找到这些证书:
mkdir /etc/swanctl/x509 mkdir /etc/swanctl/x509ca mkdir /etc/swanctl/private ln -s /etc/letsencrypt/live/gateway.your.domain/fullchain.pem /etc/swanctl/x509/fullchain.pem ln -s /etc/letsencrypt/live/gateway.your.domain/chain.pem /etc/swanctl/x509ca/chain.pem ln -s /etc/letsencrypt/live/gateway.your.domain/privkey.pem /etc/swanctl/private/privkey.pem
之后启动strongSwan:
systemctl enable strongswan systemctl start strongswan
启动成功没有报错的情况下,可以输入命令swanctl --list-certs
验证下服务器证书是否已经加载成功。
至此,strongSwan这边的配置完毕。
配置防火墙和系统内核设置
要让strongSwan VPN 能正常工作能爬墙,还需要改下防火墙和系统设置。
首先配置防火墙:
firewall-cmd --add-service ipsec firewall-cmd --permanent --add-service ipsec firewall-cmd --add-masquerade firewall-cmd --permanent --add-masquerade
这里的含义是放行IPsec所需的500、4500端口以及ESP包,并且开启IPv4 NAT。
然后改内核设置,打开/etc/sysctl.conf
加上以下几行:
net.ipv4.ip_forward = 1 net.ipv6.conf.all.accept_ra = 2
第一行的意思是打开IPv4转发。第二行的意思是在开启转发状态下让linux能接受IPv6的RA(Router advertisement)消息,不加上这个选项你的VPS就不能获得IPv6地址了。原因是打开了转发,Linux会把自己认成路由器,然后自动禁用掉IPv6自动配置,把值设成2就是要让这两者共存。
最后重启下VPS或者输入sysctl -p
,你的VPN服务器应该就可以正常工作了。
配置VPN客户端
假如之前配置服务器证书的时候你选择了自建PKI体系,那么如何给客户端系统添加根证书信任不在本文的讨论范围内。
Linux
Linux下的IPsec VPN客户端就是strongSwan本身,strongSwan项目开发了一个networkmanager图形界面的接口,可以通过图形界面方便地连接VPN。
在networkmanager的管理界面里新建一个IPsec/IKEv2(strongswan)类型的连接,按照下图里的方式配置就可以。需要注意的是,在图形界面里配置的时候自己得手动把服务器证书拉下来,然后在连接里指定。
Windows
Windows下用自带的IPsec VPN客户端。
添加VPN连接需要去网络和共享中心,选择添加新连接,弹出的向导里选择“连接到工作区”->“否,创建新连接”->“使用我的网络连接”->地址填上VPS的地址或者你的域名。
之后回到网络和共享中心,点“更改适配器设置”,找到刚才添加的VPN连接,右键属性,点“安全”选项卡,VPN类型选IKEv2,数据加密类型选”最大程度的加密”,认证方式选“EAP-MSCHAPv2”点确定。
连接VPN时,输入用户名密码fuckgfw/makevpngreatagain,连接成功后你就可以上谷歌看油管了。
Windows 10 最新版可能会有点小问题,连接的时候会提示你“IKE身份验证凭据不可接受”。原因是win10智障,不会顺着证书路径判断VPN证书是否有效(也可能仅仅LetsEncrypt会有这个问题,因为LetsEncrypt曾经换过CA)。解决办法是把VPN服务端的证书放在“受信任的根证书办法机构”里,具体位置需要打开certmgr.msc管理证书。吊诡的是,这样操作然后连接VPN成功以后,即使把添加到根证书的VPN证书删掉也能连接成功。
Android
Android本身内置了IPsec VPN的支持,但是我们配的认证类型Android是不支持的。不过strongSwan项目官方做了一个Android客户端。
别想了,国内的应用市场是不可能上架的。你能找到这个APP算我输。 所幸strongSwan官网有apk,地址是 https://download.strongswan.org/Android/ 自然我们要下载最新版。
打开APP,选”添加VPN”配置,服务器地址填上VPS地址或者域名,VPN类型选”IKEv2 EAP(用户名/密码)”。用户名密码填上fuckgfw/makevpngreatagain,点保存。最后连接新添加的VPN。
iOS 和 macOS
抱歉,我太穷了,买不起高贵的苹果设备。所以对应的客户端设置欠奉。
让IPsec VPN支持IPv6
假如你当前的网络环境只能获得IPv4地址,当你做完上面的事情之后,你应该就可以看油管刷推特了。但是你有IPv6的话,你现在还不能连接上正常的国际互联网。原因前面说了,IPv6的流量没法走IPv4的VPN。假如你不想舍弃掉IPv6网络,那么你就得想办法让VPN客户端得到一个能用的IPv6地址。或者假如你想在IPv4的网络环境下获得访问IPv6网络的能力,也可以照下面的内容做。
这里添加IPv6地址的方法,要感谢imbushuo大佬的鼎力支持。大概两年前我问过他怎样让openConnect VPN客户端得到IPv6地址的问题,他帮我解决了然后整理成了文章。相同的办法也可以套用到strongSwan VPN上。
给客户端分配IPv6地址
在swanctl.conf
里定义一个IPv6地址池,且让之前配置的VPN连接使用这个IPv6地址池。
connections { strongswan-win { ... pools = ip_pool, ip_pool6 # 让strongSwan在ip_pool6地址池里也挑个IPv6的IP分配给客户端 ... children { net1 { local_ts = 0.0.0.0/0, ::/0 # 加上::/0允许VPN客户端可以访问IPv6网络 } } } pools { ip_pool { addrs = 10.0.1.0/24 dns = 208.67.222.222, 208.67.220.220 } ip_pool6 { # 前64位是VPS服务商给你的IPv6前缀,后面可以随便写,但是如果你有其他VPN服务注意不要相互冲突 # 这里给分配的IPv6地址池一共有2^24 - 2 = 16777214个IPv6地址, # 从200a:abcd:abcd:abcd:1234:1234:3400:1 到 200a:abcd:abcd:abcd:1234:1234:34ff:fffe。 addrs = 200a:abcd:abcd:abcd:1234:1234:3400::/104 dns = 2620:119:35::35, 2620:119:53::53 } }
修改内核设置和防火墙
修改完swanctl.conf
然后重启strongswan服务,再连VPN,你可以发现你已经有了一个IPv6地址了。但是访问 https://ipv6-test.com/ 测试IPv6连接时,网站还是提示你不能访问IPv6网络。不过这时候在命令行里ping你的VPS的IPv6地址是可以ping通的,traceroute的时候也是只有一条记录(VPN模式下你的VPS就是你的网关,所以应该不会有中间地址)。要让客户端能连上IPv6互联网,还需要一些善后的工作。
在sysctl.conf
里加上以下设置,打开对IPv6流量的转发和ND Proxy:
net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.all.proxy_ndp = 1
修改防火墙设置,让防火墙放行通过VPS转发的IPv6包:
firewall-cmd --permanent --direct --add-rule ipv6 filter FORWARD 0 -j ACCEPT
为了让连上VPN的客户端对外部可见,需要把连接VPN的客户端宣告为VPS的邻居,这样外部的有IPv6网络的机器才能通过VPS找到VPN客户端获得的IPv6地址(不知道我的理解对不对)。可以用下面的命令来完成:
ip -6 neigh add proxy <VPN客户端获得的IPv6 IP> dev <获得VPS IP的网卡名>
显然,连上VPN后为了获得能用的IPv6地址还要登上VPS输一条命令是一件麻烦的事。所以strongSwan和ocserv一样,也提供了客户端连接/断开连接时自动调用Shell脚本的功能。脚本的输出会一并输出到strongSwan的log里。strongSwan提供了一个脚本示例,用来展示默认情况下VPN服务端的行为和传入到脚本中的环境变量。仿照示例我写了个这样的脚本,当然是照官网给的实例剪掉了不需要的部分做出来的:
# define a minimum PATH environment in case it is not set PATH="/sbin:/bin:/usr/sbin:/usr/bin:@sbindir@" export PATH # comment to disable logging VPN connections to syslog VPN_LOGGING=1 # # tag put in front of each log entry: TAG=vpn # # syslog facility and priority used: FAC_PRIO=local0.notice case "$PLUTO_VERB:$1" in up-client:) # connection to my client subnet coming up # If you are doing a custom version, firewall commands go here. echo "a client connected" echo "ip neigh add proxy $PLUTO_PEER_SOURCEIP dev ens3" ip neigh add proxy $PLUTO_PEER_SOURCEIP4_1 dev ens3 ;; down-client:) # connection to my client subnet going down # If you are doing a custom version, firewall commands go here. echo "a client disconnected" ip neigh delete proxy $PLUTO_PEER_SOURCEIP4_1 dev ens3 ;; up-client-v6:) # connection to my client subnet coming up # If you are doing a custom version, firewall commands go here. echo "a client connected v6" echo "ip -6 neigh add proxy $PLUTO_PEER_SOURCEIP6_1 dev ens3" ip -6 neigh add proxy $PLUTO_PEER_SOURCEIP6_1 dev ens3 ;; down-client-v6:) # connection to my client subnet going down # If you are doing a custom version, firewall commands go here. echo "a client disconnected v6" ip -6 neigh delete proxy $PLUTO_PEER_SOURCEIP6_1 dev ens3 ;; esac
写好了脚本,还需要在swanctl.conf
里声明一下:
不要忘了给脚本加上可执行的权限!
connections { strongswan-win { ... children { net1 { local_ts = 0.0.0.0/0, ::/0 updown = /etc/swanctl/strongswan-ip-neigh.sh } } } }
最后重启下strongswan服务。
systemctl restart strongswan
对Windows的特别处理
现在,你可以用strongSwan的Android客户端连接下VPN,然后访问 https://ipv6-test.com/ 检测下试试看。网站应该会提示你你已经可以连接上IPv6网络了。并且网站提示你你的IPv6地址是swanctl.conf
里设定的IPv6地址池里的地址。再尝试连接下 ipv6.google.com,应该也能正确显示网页。
Linux上的结果应该也是一样。
但是当你在windows下连接VPN时,VPN连接状态里的IPv6网络还是无网络访问权限。这是windows的问题,解决办法是对VPN适配器手工加一条到::/0
的路由,让windows知道所有的IPv6连接都要走这个VPN。以管理员权限打开一个命令提示符窗口,输入命令:
netsh interface ipv6 add route ::/0 "<windows里你的VPN连接名>"
也登录下网站测试试试看,结果应该和Android/Linux是一样的。
让IPsec VPN连接在IPv6网络可用
VPN服务器在IPv6网络下的配置和IPv4下几乎一样。不同的是除了监听地址要变成”::”,还需要把encap = yes
去掉。Linux和windows在IPv6网络环境下没法把ESP包封装进UDP协议里,加上这个选项windows会提示invalid payload received。
strongswan-win-v6 { version = 2 rekey_time = 0 local_addrs = :: send_certreq = no pools = ip_pool, ip_pool6 dpd_delay = 60s proposals = aes256-sha384-modp1024,default local { auth = pubkey certs = fullchain.pem } remote { auth = eap-mschapv2 eap_id = %any } children { net1 { local_ts = 0.0.0.0/0, ::/0 updown = /etc/swanctl/strongswan-ip-neigh.sh } } }
当然如果你就是看encap = yes
这个选项不顺眼,也可以不给IPv6连接单独弄VPN配置。在原来的配置里把这个选项拿掉,然后local_addrs
的值改成0.0.0.0, ::
,这样也是可以的。
在纯IPv6网络环境下建立VPN连接,甚至可以让你的电脑获得访问IPv4网络的能力。
另外多说一嘴,strongSwan的Android客户端并不支持连接只有IPv6地址的IPsec VPN服务器。毕竟客户端在非Root环境下也能用,所以它建立VPN连接只能依赖把IPsec流量封装进UDP这个手段,无论系统本身是否能获得公网IP。众所周知linux下要发裸IP包是需要root权限的。然而linux在IPv6情况下不支持把IPsec怼进UDP里,所以就只好不支持了。见 https://wiki.strongswan.org/issues/892 。
排错
查看服务端日志能定位绝大部分的问题。
VPN配置文件出错时,使用systemd重启VPN服务会失败。这时候用systemctl status
看状态能看到strongSwan解析配置文件解析到哪里出了错。
要在服务端跟踪VPN连接的日志,可以输入swanctl --log
命令。有了日志了,报错了,然后怎么办?当然是用咕狗搜日志内容啦!
后记
在我“自力更生”在风滚草上成功搭上IPv6隧道之后,我又试了别的发行版。目前试验过的发行版有 openSUSE Leap 15.1 和 CentOS 8。相同配置下出现了和风滚草不太一样的情况,具体是为什么需要求助下。
情况是这样的:sysctl.conf
里IPv4和IPv6的转发都打开、给VPN客户端的IPv6地址池也写上、但是ND Proxy的记录没有添加的情况下(就是最后的脚本做的事情),客户端获得的IPv6地址居然就已经可以联网了!只不过网站显示的IPv6 IP是VPS的而不是VPN客户端获得的。别的地方ping VPN客户端获得的IP也ping不通。加上了ND Proxy虽然能ping通了,在VPN客户端搭web服务器监听v6地址然后curl也能出结果,但是网站给出的IPv6 IP还是VPS的。
IPsec真的是深不可测的一个协议。 没准哪里就会碰到坑。这也是刚开始要吐槽的原因。
代理服务器不香吗!
参考资料
strongSwan 项目
swanctl.conf
配置文件的帮助:https://wiki.strongswan.org/projects/strongswan/wiki/Swanctlconf如何把
ipsec.conf
的配置迁移到swanctl.conf
:https://wiki.strongswan.org/projects/strongswan/wiki/FromipsecconfstrongSwan在IPv6环境下的测试用例——公网的roadwarrior连接拥有IPv6地址的VPN网关moon:https://www.strongswan.org/testing/testresults/ipv6/rw-ip6-in-ip4-ikev2/index.html
VPN客户端连接成功后触发脚本的示例:https://wiki.strongswan.org/projects/strongswan/repository/revisions/master/entry/src/_updown/_updown.in
大佬们的教程
MargueriteSu撰写的教程,我就是从这里学会配置IPsec VPN的:https://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan
imbushuo大佬教导我配置OpenConnect之后,在v2ex上整理的心得:https://www.v2ex.com/t/476942
解决windows下的IPv6问题:https://www.cl.cam.ac.uk/~mas90/resources/strongswan/
声明:仅分享心得,不提供答疑服务。
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/5160.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~