永不被墙 ocserv + openconnect

引言

ocserv(Openconnect VPN Server)是一款开源的、兼容Cisco(思科) Anyconnect VPN的VPN服务端软件。由于思科的主用户群体主要分布在政府、教育、医疗、金融、通信等各个领域,所以思科的VPN一直被特殊照顾,号称永不被墙。这也给我们提供了某种程度上的便利,使用ocserv架设VPN服务器一直以来都较为稳定,干扰较小。另外它也支持多平台,像Windows、Android、iOS都能找到它的客户端。今天我就来教大家解锁这个目前为止最强的翻墙协议。

使用体验

从速度上来看,它能轻松跑满50Mbps的带宽。

其次,由于ocserv使用的是udp协议传输数据,所以对于游戏加速特别友好,我这边连接美服的延迟可以稳定在160ms。像SSR,V2ray,Trojan等科学上网软件在这方面就差好多,它们只适合浏览网页冲浪。

而且最近我发现万年不更新的客户端项目居然复活了,貌似还解决了自动分流的bug。本来ocserv我是当备用方案来着,现在它又有了用武之地。

安装前的准备

首先我们要准备一台合适的VPS服务器,并安装好Ubuntu20.04系统,注意系统的版本不要弄错了。

相关操作方法请参考这篇文章(链接)。

打开PowerShell并使用ssh命令登录VPS服务器(限win10+),将红色部分替换成你的服务器IP地址。如果是win7的话需要单独下载一个SSH登录软件。推荐使用xshell,下载链接。个人版可以免费使用,安装完之后输入邮箱验证一下即可,软件支持中文。

ssh root@yourIP

复制代码之后在PowerShell界面单击右键,然后回车确认,首次登录需要校验公钥指纹,输入yes按回车确认。

再次发起连接,并输入密码。注意这里输入密码是不会有提示符的,输完之后按回车即可。如果密码输入错误,会断开连接,需要重新发起连接请求。

登录成功之后会显示主机的详细信息。

更新软件源

第一次进入系统需要输入如下命令更新软件源

apt update

复制命令之后在Powershell界面单击右键,按回车确认输入

下载ocserv一键安装脚本

默认情况下系统自带wget下载工具包,如果是简化版本的ubuntu可能需要运行下面的命令单独安装

apt install wget

输入下面的命令下载脚本,为了方便大家下载我将脚本上传到网站的服务器了。

wget https://laozhuang.club/wp-content/uploads/ocservauto.sh

脚本安装设置

默认会下载脚本到当前登录的目录,然后输入下面的命令运行并安装ocserv

bash ocservauto.sh

虽然是一键安装脚本,但是在安装的过程中还是有一些需要设置的地方,例如账号、密码、端口。

  • 选择手动配置

安装过程中会先检查系统是否满足安装需求。

  • 自定义配置

然后提示我们是否要自定义配置。选择是,输入“y”,按回车确认。

友情提示:如果在配置的过程中选错了,可以“Ctrl + C”取消,重新运行安装命令,不会有任何影响。

  • 证书登录

紧接着接示我们是否选择用证书登录,默认是否,直接敲回车。

我不推荐使用证书登录,原因是需要为每个客户端单独配置证书,对新手不友好。我们只是用来科学上网,选择账号密码登录即可,实际上我自己也并没有使用证书。

  • 自动生成证书

接下来提示我们是否选择为服务器生成证书,默认yes,这一步也是直接敲回车。

尽管客户端可以选择账号密码登录,但是服务器必须要有证书,脚本会自动签发处理,作为用户我们不必关心。

  • 证书相关信息

接下来的三个选项是与生成证书相关的信息。如无必要,请保持默认设置,直接敲回车,

  • 确认服务器IP

然后程序会自动获取服务器IP地址,99%的情况都是正确的不用我们修改,直接敲回车。

  • 确认ocser下载地址

这里会出现一行警告信息,提示我们需要从github下载安装ocserv,无须担心。

  • 确认连接端口

接下来会要求我们确认用于登录连接的TCP端口,可以保持默认,也可以根据自己的网络情况修改。

我一直都是用的默认端口9999,并不会被防火墙针对。

  • 数据传输方式

ocserv即可以使用TCP方式传输数据,也可以使用UDP方式传输数据。默认是开启UDP的,此处也是直接敲回车。

前面我们就说过UDP的传输效率更高,连接稳定,延迟低,更重要的是它不容易被防火墙针对。

  • UDP传输端口

由于我们开启了UDP传输,所以还需要为UDP连接指派端口,默认是9999,也可以直接回车。

没有什么特殊需求的话,不用修改端口。

  • 开机启动服务

默认设置开机启动,直接敲回车确认。

由于我们是长期使用,正常情况下肯定需要开机自启动,这样当服务器宕机的时候,就不用麻烦了。

  • 是否保存脚本参数

接下来会询问是否保存当前正在进行的这些设置选项以便下次快速安装,默认选否,直接回车不保存。

  • 设置登录用户名和密码

最后是设置登录账号和密码,根据自己的喜好输入。如果不指定的话,默认会随机生成一个ID,密码。

  • 开始自动安装

现在就已经全部设置好了,脚本会提示你按任意键开始安装。

  • 升级内核

由于安装的过程中需要升级内核,系统会询问我们是否保持ssh设置不变,此处选择默认设置。

请注意不要选错了,否则可能会丢失ssh连接导致主机无法正常登录。

  • 完成安装

安装过程大概会持续数分钟左右。等待界面出现如下信息,表明程序已经顺利完成安装。

由于我们是用ocserv来翻墙上网,这并非它的主要功能,所以我们还需要进行一些额外的设置。

更换终端

由于PowerShell的颜色和vi的主题颜色冲突,导致肉眼难收分辨文本中的内容,所以接下来我会用SSH客户端来演示。

打开Xshell,新建一个连接,并输入正确的主机IP,然后点击连接

同样的,第一次登录需要保存公钥指纹,点击接受并保存。

然后输入用户名“root”,点击连接之后此时会退出登录,这是正常情况。然后从左边的会话里面,双击左键再次发起连接。

输入正确的密码完成登录认证

接下来,我们会在服务端依次完成代理科学上网所需要的各种设置,并最终实现国内外流量分流。

允许 IP 转发

编辑 /etc/sysctl.conf 文件,去掉 net.ipv4.ip_forward 设置前的注释。

vi /etc/sysctl.conf

在Xshell的登录界面单击鼠标右键,粘贴复制上面的代码,并输入回车确认。然后通过键盘上的“↑”和“↓”箭头翻找,找到“net.ipv4.ip_forward=1”所在的行。

按下键盘上的字母“a”键,此时左下角处会出现白色的“– insert –”字样,代表编辑功能开启。

将光标移动到“net.ipv4.ip_forward=1”所在的行,并删除掉注释号“#”,作用是让这行配置生效。

按ESC键退出编辑模式,并依次输入“:wq”,准备保存修改。

之后输入回车确认修改,之后会返回到登录界面。以上过程就是文本型文件的通用操作方式,接下来不再赘述。

友情提示:如果不小心输入错误,想要重新编辑,可以输入“:q!”放弃更改。

开启防火墙转发

ocserv上网的原理是将用户和服务器通过VPN组合成一个虚拟的局域网,所以客户端的流量想通过服务器出口就需要防火墙进行NAT转发。

在登录界面执行下面的命令

vi /etc/default/ufw

然后找到“DEFAULT_FORWARD_POLICY”所在的行,将默认的DROP修改成ACCEPT,注意要大写。

最后别忘了“:wq”保存退出。

创建NAT规则

Ocserv设置中的默认网端是172.168.1.0/24。所以我们还需要在防火墙中创建一条规则让所以的流量都通过服务端映射出云。

首先编辑放火墙的配置文件

vi /etc/ufw/before.rules

找开配置页面之后,在“*filter”的上方插入下面的内容。

# START VPN RULES# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE
COMMIT
# END VPN RULES

“:wq”保存

设置防火墙

由于我们马上要开启防火墙,所以提前设置好相关规则。

首先是允许远程访问端口,执行如下命令

ufw allow 22/tcp

然后是ocserv运行需要的9999端口,执行如下命令

ufw allow 9999

如果你在刚才的设置中更改过默认端口,这里也需要做出相应的调整。另外如果同时还运行其它服务,例如之前介绍过的x-ui,也需要添加防火墙白名单。

最后开启防火墙

ufw enable

它会提示你可能会丢失连接,由于我们已经提前设置了22端口,自然是无需担心翻车。还记得我是萌新的时候,就会在这一步出错,导致服务器自此连接不上。

修改ocserv配置文件

现在,与系统相关的所有设置都已经完成了。然而现在客户端其实是不能上网的,因为这个一键安装脚本的配置文件有些过时。首先它的DNS设置不对,会导致我们开不了某些网页。而且我们还需要根据本地情况调整一下路由,做到自动分流。

  • 修改DNS

执行下面的命令,准备编辑ocserv的配置文件

vi /etc/ocserv/ocserv.conf

配置文件有点长,这里需要一点点耐心,慢慢找到DNS所在的位置。蓝色的是注释,不需要管,专注于加亮的部分就行了。

原来的DNS119.29.29.29是腾迅的,所以会有问题,需要全部换成谷歌的DNS。

  • 自动分流

暂时不要关闭设置文档,继续往下移动,找到”no-route”所在的位置,将这些配置全部删除。

no-route的作用是让这些目标IP地址的出口流量不经过服务器发送。原来的这些配置过于随意,我重新制作了一份新的国内IP地址和特殊保留地址。

复制下方的no-route列表到配置文档

# 国内IP分流
no-route = 1.160.0.0/255.224.0.0
no-route = 1.192.0.0/255.224.0.0
no-route = 5.182.60.0/255.224.0.0
no-route = 14.0.0.0/255.224.0.0
no-route = 14.96.0.0/255.224.0.0
no-route = 14.128.0.0/255.224.0.0
no-route = 14.192.0.0/255.224.0.0
no-route = 27.0.0.0/255.192.0.0
no-route = 27.96.0.0/255.224.0.0
no-route = 27.128.0.0/255.128.0.0
no-route = 36.0.0.0/255.192.0.0
no-route = 36.96.0.0/255.224.0.0
no-route = 36.128.0.0/255.128.0.0
no-route = 39.0.0.0/255.224.0.0
no-route = 39.64.0.0/255.192.0.0
no-route = 39.128.0.0/255.192.0.0
no-route = 40.64.0.0/255.192.0.0
no-route = 45.128.0.0/255.224.0.0
no-route = 45.224.0.0/255.224.0.0
no-route = 47.64.0.0/255.192.0.0
no-route = 49.0.0.0/255.128.0.0
no-route = 49.128.0.0/255.224.0.0
no-route = 49.192.0.0/255.192.0.0
no-route = 52.80.0.0/255.224.0.0
no-route = 52.130.0.0/255.224.0.0
no-route = 54.222.0.0/255.224.0.0
no-route = 57.176.0.0/255.224.0.0
no-route = 58.0.0.0/255.128.0.0
no-route = 58.128.0.0/255.224.0.0
no-route = 58.192.0.0/255.192.0.0
no-route = 59.32.0.0/255.224.0.0
no-route = 59.64.0.0/255.192.0.0
no-route = 59.128.0.0/255.128.0.0
no-route = 60.0.0.0/255.192.0.0
no-route = 60.160.0.0/255.224.0.0
no-route = 60.192.0.0/255.192.0.0
no-route = 61.0.0.0/255.192.0.0
no-route = 61.64.0.0/255.224.0.0
no-route = 61.128.0.0/255.192.0.0
no-route = 61.224.0.0/255.224.0.0
no-route = 62.0.0.0/255.224.0.0
no-route = 62.234.0.0/255.224.0.0
no-route = 65.111.0.0/255.224.0.0
no-route = 68.79.0.0/255.224.0.0
no-route = 69.224.0.0/255.224.0.0
no-route = 71.128.0.0/255.224.0.0
no-route = 81.68.0.0/255.224.0.0
no-route = 82.156.0.0/255.224.0.0
no-route = 85.209.40.0/255.224.0.0
no-route = 91.224.0.0/255.224.0.0
no-route = 94.191.0.0/255.224.0.0
no-route = 101.0.0.0/255.128.0.0
no-route = 101.128.0.0/255.224.0.0
no-route = 101.192.0.0/255.192.0.0
no-route = 103.0.0.0/255.0.0.0
no-route = 104.160.0.0/255.224.0.0
no-route = 104.192.0.0/255.224.0.0
no-route = 106.0.0.0/255.128.0.0
no-route = 106.224.0.0/255.224.0.0
no-route = 109.224.0.0/255.224.0.0
no-route = 110.0.0.0/254.0.0.0
no-route = 112.0.0.0/255.128.0.0
no-route = 112.128.0.0/255.224.0.0
no-route = 112.192.0.0/255.192.0.0
no-route = 113.0.0.0/255.128.0.0
no-route = 113.128.0.0/255.224.0.0
no-route = 113.192.0.0/255.192.0.0
no-route = 114.0.0.0/255.128.0.0
no-route = 114.128.0.0/255.224.0.0
no-route = 114.192.0.0/255.192.0.0
no-route = 115.0.0.0/255.0.0.0
no-route = 116.0.0.0/255.0.0.0
no-route = 117.0.0.0/255.128.0.0
no-route = 117.128.0.0/255.192.0.0
no-route = 118.0.0.0/255.224.0.0
no-route = 118.64.0.0/255.192.0.0
no-route = 118.128.0.0/255.128.0.0
no-route = 119.0.0.0/255.128.0.0
no-route = 119.128.0.0/255.192.0.0
no-route = 119.224.0.0/255.224.0.0
no-route = 120.0.0.0/255.192.0.0
no-route = 120.64.0.0/255.224.0.0
no-route = 120.128.0.0/255.224.0.0
no-route = 120.192.0.0/255.192.0.0
no-route = 121.0.0.0/255.128.0.0
no-route = 121.192.0.0/255.192.0.0
no-route = 122.0.0.0/254.0.0.0
no-route = 124.0.0.0/255.0.0.0
no-route = 125.0.0.0/255.128.0.0
no-route = 125.160.0.0/255.224.0.0
no-route = 125.192.0.0/255.192.0.0
no-route = 128.108.0.0/255.224.0.0
no-route = 129.28.0.0/255.224.0.0
no-route = 129.192.0.0/255.224.0.0
no-route = 132.232.0.0/255.224.0.0
no-route = 134.175.0.0/255.224.0.0
no-route = 137.32.0.0/255.224.0.0
no-route = 139.0.0.0/255.224.0.0
no-route = 139.128.0.0/255.128.0.0
no-route = 140.75.0.0/255.224.0.0
no-route = 140.128.0.0/255.128.0.0
no-route = 142.64.0.0/255.224.0.0
no-route = 143.64.0.0/255.224.0.0
no-route = 144.0.0.0/255.192.0.0
no-route = 144.123.0.0/255.224.0.0
no-route = 144.255.0.0/255.224.0.0
no-route = 146.0.0.0/255.192.0.0
no-route = 146.192.0.0/255.224.0.0
no-route = 148.70.0.0/255.224.0.0
no-route = 149.41.0.0/255.224.0.0
no-route = 150.0.0.0/255.224.0.0
no-route = 150.96.0.0/255.224.0.0
no-route = 150.128.0.0/255.224.0.0
no-route = 150.192.0.0/255.192.0.0
no-route = 152.96.0.0/255.224.0.0
no-route = 152.128.0.0/255.224.0.0
no-route = 153.0.0.0/255.192.0.0
no-route = 153.96.0.0/255.224.0.0
no-route = 154.8.128.0/255.224.0.0
no-route = 157.0.0.0/255.192.0.0
no-route = 157.96.0.0/255.224.0.0
no-route = 157.128.0.0/255.224.0.0
no-route = 157.255.0.0/255.224.0.0
no-route = 158.32.0.0/255.224.0.0
no-route = 158.64.0.0/255.224.0.0
no-route = 159.27.0.0/255.224.0.0
no-route = 159.75.0.0/255.224.0.0
no-route = 159.224.0.0/255.224.0.0
no-route = 160.0.0.0/255.224.0.0
no-route = 160.192.0.0/255.192.0.0
no-route = 161.120.0.0/255.224.0.0
no-route = 161.160.0.0/255.224.0.0
no-route = 161.192.0.0/255.224.0.0
no-route = 162.14.0.0/255.224.0.0
no-route = 162.105.0.0/255.224.0.0
no-route = 163.0.0.0/255.192.0.0
no-route = 163.96.0.0/255.224.0.0
no-route = 163.128.0.0/255.128.0.0
no-route = 164.52.0.0/255.224.0.0
no-route = 166.111.0.0/255.224.0.0
no-route = 167.128.0.0/255.192.0.0
no-route = 167.192.0.0/255.224.0.0
no-route = 168.160.0.0/255.224.0.0
no-route = 170.179.0.0/255.224.0.0
no-route = 171.0.0.0/255.128.0.0
no-route = 171.208.0.0/255.224.0.0
no-route = 172.81.192.0/255.224.0.0
no-route = 175.0.0.0/255.128.0.0
no-route = 175.128.0.0/255.192.0.0
no-route = 176.116.4.0/255.224.0.0
no-route = 178.236.224.0/255.224.0.0
no-route = 180.64.0.0/255.192.0.0
no-route = 180.128.0.0/255.128.0.0
no-route = 182.0.0.0/255.0.0.0
no-route = 183.0.0.0/255.192.0.0
no-route = 183.64.0.0/255.224.0.0
no-route = 183.128.0.0/255.128.0.0
no-route = 185.2.48.0/255.224.0.0
no-route = 185.145.244.0/255.224.0.0
no-route = 185.192.0.0/255.224.0.0
no-route = 188.131.128.0/255.224.0.0
no-route = 192.32.0.0/255.224.0.0
no-route = 192.96.0.0/255.224.0.0
no-route = 192.128.0.0/255.224.0.0
no-route = 192.197.113.0/255.224.0.0
no-route = 193.112.0.0/255.224.0.0
no-route = 194.96.0.0/255.224.0.0
no-route = 194.246.40.0/255.224.0.0
no-route = 198.175.100.0/255.224.0.0
no-route = 199.212.57.0/255.224.0.0
no-route = 202.0.0.0/255.128.0.0
no-route = 202.128.0.0/255.192.0.0
no-route = 202.192.0.0/255.224.0.0
no-route = 203.0.0.0/255.255.192.0
no-route = 203.0.64.0/255.255.224.0
no-route = 203.0.96.0/255.255.240.0
no-route = 203.0.112.0/255.255.255.0
no-route = 203.0.114.0/255.255.254.0
no-route = 203.0.116.0/255.255.252.0
no-route = 203.0.120.0/255.255.248.0
no-route = 203.0.128.0/255.255.128.0
no-route = 203.1.0.0/255.255.0.0
no-route = 203.2.0.0/255.254.0.0
no-route = 203.4.0.0/255.252.0.0
no-route = 203.8.0.0/255.248.0.0
no-route = 203.16.0.0/255.240.0.0
no-route = 203.32.0.0/255.224.0.0
no-route = 203.64.0.0/255.192.0.0
no-route = 203.128.0.0/255.192.0.0
no-route = 203.192.0.0/255.224.0.0
no-route = 204.52.191.0/255.224.0.0
no-route = 210.0.0.0/255.192.0.0
no-route = 210.64.0.0/255.224.0.0
no-route = 210.160.0.0/255.224.0.0
no-route = 210.192.0.0/255.224.0.0
no-route = 211.64.0.0/255.192.0.0
no-route = 211.128.0.0/255.192.0.0
no-route = 212.64.0.0/255.224.0.0
no-route = 212.129.128.0/255.224.0.0
no-route = 213.139.232.0/255.224.0.0
no-route = 217.114.35.0/255.224.0.0
no-route = 218.0.0.0/255.128.0.0
no-route = 218.160.0.0/255.224.0.0
no-route = 218.192.0.0/255.192.0.0
no-route = 219.64.0.0/255.224.0.0
no-route = 219.128.0.0/255.224.0.0
no-route = 219.192.0.0/255.192.0.0
no-route = 220.96.0.0/255.224.0.0
no-route = 220.128.0.0/255.128.0.0
no-route = 221.0.0.0/255.224.0.0
no-route = 221.96.0.0/255.224.0.0
no-route = 221.128.0.0/255.128.0.0
no-route = 222.0.0.0/255.0.0.0
no-route = 223.0.0.0/255.224.0.0
no-route = 223.64.0.0/255.192.0.0
no-route = 223.128.0.0/255.128.0.0
# 特殊处理
no-route = 192.168.0.0/255.255.0.0
no-route = 10.0.0.0/255.0.0.0
no-route = 172.16.0.0/255.240.255.0
no-route = 224.0.0.0/224.0.0.0

最后保存退出

说明:no-route和route只能选一种,屏蔽国内IP的代理转发用no-route比较合适。另外这份路由表并非百分百完美分流,有可能会导致部分网站打不开。如果发生这种情况,请删除除“特殊处理”之外的路由表,让所有非局域网之外的流量走服务器出口。

现在服务端这边的设置就已经完成了,输入下面的命令重启主机让ocserv生效。

reboot

客户端设置

ocserv的客户端有两种,一种是思科原生的客户端Anyconnect,一种是开源的Openconnect客户端。我推荐使用Openconnect进行连接。

  • Windows客户端

Openconnect下载地址:(链接

一路默认安装,然后创建连接

名字随便填,IP地址就是我们服务器的IP地址外加正确的端口,注册输入格式,“:”别写错了,点击“Save & Connect”保存设置并连接。

首次连接会记录公钥指纹,点击左边的选项

然后输入正确的账号和密码,登录认证账号。如果锁变成绿色,说明VPN已经成功建立连接。

不出意外,现在应该可以正常浏览国外的网站了。

在设置页面可以勾选这两个选项,这样就可以不用每次都输入密码了。

在某此特殊的情况下,还可以禁用UDP。这就是我为什么推荐使用openconnect的原因。

  • IOS客户端

Openconnect下载地址:(链接

苹果系统的设置和Windows差不多,这里就不演示了。如需其它版本的客户端,可以自行谷歌下载。

友情提示:如果在使用过程中遇到限速的问题,请参考这篇文章(链接)。

常用命令

  • 创建用户,需要输入密码
ocpasswd -c /etc/ocserv/ocpasswd userID
  • 禁用用户
ocpasswd -c /etc/ocserv/ocpasswd -l userID
  • 解锁被禁用的用户
ocpasswd -c /etc/ocserv/ocpasswd -u userID
  • 删除用户
ocpasswd -c /etc/ocserv/ocpasswd -d userID

总结

尽管ocserv的设置比较烦锁,但是还有很有必要在服务器安装一个的。一方面可以作为备用,另一方面它也确实很给力。如果安装过程中遇到任何问题,可以在下方留言告诉我。

发表回复 12

您的邮箱地址受系统保护,并不会公开。 星号栏目为必填项 *


lao, zhuang

lao, zhuang

前面学习搭建v2rayn的,现在成功搞了ocserv,然后发现v2rayn的用不了了,这正常吗老庄大大?

laozhuang

laozhuang

正常,ws被墙了。暂时稳定的只有ocserv还有vless。

lao, zhuang

lao, zhuang

应该不是被墙吧,我设置ocserv之前还可以用,把ocserv整好以后,x-ui也进不去了(就是浏览器里ip加端口)

laozhuang

laozhuang

重启服务器,再重置一下x-ui,然后打开防火墙试试能不能连上,这两个服务不冲突,可以同时安装。

xiao_531

xiao_531

这个不能登录chatgpt4官网吗?提示 “unable to load site”

laozhuang

laozhuang

是的,我每天都用,没遇到过你说的这种情况。你用的什么主机?

laozhuang

laozhuang

我的邮箱是[email protected],方便的话,你可以将VPS服务器的登录信息发给我一下,我帮你看看。

xiao_531

xiao_531

已发邮件,有时间帮忙看下,谢谢

Index