原创技术类

AnyLink:一款基于ocserv的 SSL VPN 企业级解决方案

本文阅读 11 分钟
首页 技术类 正文

AnyLink 是一款 SSL VPN 软件,它可以兼容 AnyConnect 以满足对企业内网的接入。另外你也可以像 x-ui 那样分配用户组以及规则,总之在 Clash 纷纷删库后使用三层VPN当梯子确实是个退而求其次的方案。本文以CentOS 7为例,简单介绍 AnyLink 的部署及使用技巧。

准备工作

  1. CentOS 7 服务器(AnyLink 服务端仅在 CentOS 7、CentOS 8、Ubuntu 18.04、Ubuntu 20.04 测试通过)
  2. 获取 anylink-deploy.tar.gz 并上传至服务器
  3. 获取域名证书(腾讯云、阿里云都可以免费签一年)

确认好网络环境

AnyLink 的 link_mode 参数有 tun、macvtap和tap模式。当然作者不推荐使用tap模式,实际测试下性能确实会大幅衰减。区别tun和macvtap这俩模式主要取决于环境,这边简单描述下就懂了。

tun模式

一般是云服务器使用,你可以理解成 NAT 了一层。(VMware中的NAT模式)

即VPN客户端能访问服务器内网,但服务器内网不能访问VPN客户端,就像在公司网络中放了一台路由器,VPN客户端则是这台二级路由下的一个主机。被代理的IP段叫做安全路由(router),不被代理的IP段叫做非安全路由(norouter)。

为了方便演示我购买了一台云服务器,按 AnyLink 默认配置 192.168.90.0/24 (与服务器内网不同段)为例VPN客户端分配的IP为 192.168.90.100-200,其网卡为 eth0 并出于 172.24.135.36/20 这个VPC中。

lonw8q27.png

VPN客户端连接的地址会以 /conf/server.toml 中所设定的内网(默认为 192.168.90.0/24)进行分配并作为安全路由,例如要访问服务器的VPC网络,在部署完成后需在面板添加 172.24.135.0/20 为安全路由。

macvtap模式

与 tun 模式不同的是,macvtap 模式少了一层NAT,直接接在服务器内网上(VMware中的桥接模式)

VPN客户端在连上后分配的是服务器内网同段的地址,相当于是直接连接物理网络。因此 /conf/server.toml 中的网络参数需与服务器网卡一致,区别在于IP分配范围以避免IP冲突问题。

如何给VPN客户端发公网IP

扯个题外话,例如我有宿迁移动 221.131.165.129/25 所有IP地址的使用权,但除业务外只有 200 - 254 属于空闲IP。那么使用macvtap模式设置的VPN客户端分配的IP地址池应为:

#客户端分配的ip地址池
ipv4_master = "eth0"
ipv4_cidr = "221.131.165.129/25"
ipv4_gateway = "221.131.165.129"
ipv4_start = "221.131.165.200"
ipv4_end = "221.131.165.254"

当连接成功后,服务器将会分配 221.131.165.200-254 (按顺序或管理面板固定IP)给VPN客户端。若内网环境为公网,则可以做到发公网IP的目的。

服务器设置

安全组又叫防火墙,云厂商默认开启的东西。AnyLink需要开放443和8800,分别用于连接和管理面板,有安全考虑的同学可以自行放行,一般我简单粗暴设置全放行。

lonx614x.png

安全组开放后,要关闭系统中的 selinux 和防火墙

如果你是本地机房也需要开放一个公网IP地址+端口供客户端远程连接,并且关闭selinux和firewalld

  1. 关闭selinux

    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 永久关闭selinux(重启后生效)
    setenforce 0 # 临时关闭selinux(不需要重启,立即生效)
  1. 关闭firewalld

    systemctl stop firewalld # 临时关闭防火墙
    systemctl disable firewalld # 永久关闭防火墙

部署 AnyLink

安装和配置

  1. 下载anylink,点击获取 anylink-deploy.tar.gz ,然后上传到服务器
  2. SSH连接到,解压二进制包到/usr/local目录

    tar -xzvf anylink-deploy.tar.gz -C /usr/local/
  3. 进入anylink目录

    cd /usr/local/anylink-deploy
  4. 生成密码password的密文,请修改为你自己要设置的密码

    注意密码不能有$符号,会被当成变量,也可以用单引号包起来
    ./anylink tool -p password

    记录下 Passwd: 后的密钥,等会改配置文件要用

  5. 生成jwt密钥

    ./anylink tool -s

    记录下 Secret: 后的密钥,等会改配置文件要用

修改 server.toml 文件

打开 https://github.com/bjdgyc/anylink/blob/main/server/conf/server-sample.toml 下载配置模板,然后重命名为 server.toml,开始修改配置文件:

#系统名称
issuer = "XX公司VPN"
#后台管理用户
admin_user = "admin"
#pass 123456
admin_pass = "$2a$10$UQ7C.EoPifDeJh6d8.31TeSPQU7hM/NOM2nixmBucJpAuXDQNqNke"
# 留空表示不开启 otp, 开启otp后密码为  pass + 6位otp
# 生成 ./anylink tool -o
admin_otp = ""
jwt_secret = "abcdef.0123456789.abcdef"

系统名称在等会会用到,可以带空格。另外建议把后台用户名 admin_user 改掉,使用 admin 可能会存在风险。然后将上一步, Passwd: 后和 Secret: 后的密钥依次替换admin_pass和jwt_secret对应引号的内容。

往下有个 link_mode ,若为NAT模式则保持tun即可,想桥接到内网中请改为macvtap。将 ipv4_master 的 eth0 设置为服务器网卡,使用 ip addr 指令就能看到,一般不是eth0就是ens192。

接下来找到发布默认域,改成你的域名。例如 vpn.itxe.net (与后面的证书保持一致),这个等下改下发配置文件也会用到,与系统名称一样要记住。

# 要发布的默认域
default_domain = " vpn.itxe.net"

最后是启用压缩功能,这个吃CPU算力。默认配置文件中不开,但正常的服务器开了反而节流也不会影响到速度,能相对的提升小包的转发性能。

修改 profile.xml 文件

从这个文件的23行开始看:

        <BackupServerList>
            <HostAddress>localhost</HostAddress>
        </BackupServerList>
    </ClientInitialization>

    <ServerList>
        <HostEntry>
            <HostName>VPN Server</HostName>
            <HostAddress>localhost</HostAddress>
        </HostEntry>
    </ServerList>

我们需要修改两个 HostAddress 为上面的发布默认域,另外我司sslvpn使用的是443端口,则写作

<HostAddress>vpn.itxe.net:443</HostAddress>

另外将 HostName 改为刚刚写的名称:

<HostName>XX公司VPN</HostName>

当VPN客户端首次连接后,AnyLink服务器会向客户端下发该配置文件,以确保下次连接时可以直接在列表中选择该服务器,如你有多个sslvpn服务器请用 xx公司VPN - xxx 来区别,并将 中放入其他服务器。

传SSL证书

选择签发证书的nginx格式,会得到fullchaim.pem和private.key俩文件。fullchaim.pem重命名为vpn_cert.crt,private.key重命名为vpn_cert.key并上传至 /usr/local/anylink-deploy/conf 中。这个证书可以考虑配置好后吊销,因为AnyLink内置了 Let's Encrypt 证书且定时更新。

启动前需要设置的内容

tun

  1. 开启服务器ipv4转发

    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  2. 立即生效

    sysctl -p
  3. 设置nat,请替换网卡名称为前面查看的内网网卡名称,另外,如果server.toml文件里面客户端的IP地址池不是默认的192.168.90.0/24,也请修改为对应的IP地址池
iptables -t nat -A POSTROUTING -s 192.168.90.0/24 -o eth0 -j MASQUERADE
  1. 查看设置是否生效
iptables -nL -t nat

若显示上面配的规则,则ipv4转发生效

  1. 安装iptables-services,用于保存iptables配置,永久生效
yum install -y iptables-services
  1. 设置开机自启
systemctl enable iptables.service
  1. 保存当前iptables设置
service iptables save

若提示 iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ] 则说明配置成功

macvtap

若选择桥接模式,请在 server.toml 中禁用NAT

#是否自动添加nat
iptables_nat = false

创建日志文件目录

请修改为自己配置的日志路径,不创建会启动失败,如果没有打开日志输出,可以跳过

mkdir /usr/local/anylink-deploy/log

启动 AnyLink

  1. 复制service文件到系统中

    cp /usr/local/anylink-deploy/systemd/anylink.service /usr/lib/systemd/system/
  2. 启动anylink

    systemctl start anylink
    systemctl enable anylink
  3. 查看启动状态

    systemctl status anylink

看到绿色的 Active: active (running) 则说明AnyLink启动成功。

配置管理面板

访问地址公网IP+端口(默认8800),输入账号(admin)和 密码(password)点击登录

http://vpn.itxe.net:8800

自定义 SSL VPN

选择 其他设置 - VPN 对外地址,修改为配置文件中写的默认域

修改 Banner 信息及自定义首页,Banner信息将会在登录成功后在客户端显示

lonyu2tq.png

配置自动更新证书

选择 其他设置 - 证书设置 - Let's Encrypt证书,按照api填写就好了。这样就不用担心证书过期而报信任错误,每3个月将会自动续期一次。

lonyvvbo.png

企业配置项

如果你想搞统一认证账号,我推荐你搭个WinRadius(搞AD域再弄,或是freeredius指令我想对于小白是并不友好的),然后交给 Radius 服务器来认证

lonz19sw.png

WinRadius下载: https://www.123pan.com/s/WekeVv-SKSY3.html

由于该软件并不支持第三方登录的OTP,在此我配置了公司的LDAP:

lonyy2ut.png

另外默认是sqlite3存储数据库,可能较为简单的是mysql数据库对接?但我还没尝试过,还请其他dalao研究以后在底下评论区告知。

客户端指引下载

访问 https://devops-100tal.oss-cn-beijing.aliyuncs.com/vpnuserguide/vpnuserguide.htm 里面教程写的清清楚楚,这里就不多赘述可以自己慢慢看

Windows 客户端

win10-5.0.02075 版

win10-4.10 版

win10 ARM64(Surface pro X/Raspberry Pi) 版

win7/win8 版

macOS 客户端

mac 客户端(13.0 以上)

mac 客户端(10.11 以上/ 支持OS 11 Big Sur 版)

mac 客户端(Maverick 10.9 版/Yosemite 10.10 版)

注:更新客户端版本时,先按照如下方法卸载掉老客户端后再安装,不要直接把程序仍到回收站,否则会出现无法安装的情况

打开桌面“访达 ”,选择左边的 “应用程序 ”,找到 “Cisco”文件夹下的 “Uninstall Anyconnect”,双击卸载时输入电脑的开机密码即可完成卸载

Android

Android用户

VPN客户端APK安装包

https://play.google.com/store/apps/details?id=com.cisco.anyconnect.vpn.android.avf&hl=zh

iOS

登录 app store,搜索“cisco anyconnect”,下载安装 VPN客户端

https://apps.apple.com/cn/app/cisco-secure-client/id1135064690

附赠小礼物

我知道有些人会拿来做特殊用途,由于AnyConnect限制规则为200条,因此no-router(非安全路由)只能设置200条。再此分享一下中国IP列表:

1.0.0.0/10
1.64.0.0/11
1.112.0.0/13
1.176.0.0/12
1.192.0.0/12
14.0.0.0/11
14.96.0.0/11
14.128.0.0/11
14.192.0.0/11
27.0.0.0/10
27.96.0.0/11
27.128.0.0/11
27.176.0.0/12
27.192.0.0/11
27.224.0.0/14
36.0.0.0/10
36.96.0.0/11
36.128.0.0/10
36.192.0.0/11
36.240.0.0/12
39.0.0.0/16
39.64.0.0/11
39.96.0.0/12
39.128.0.0/10
40.72.0.0/15
40.124.0.0/14
42.0.0.0/13
42.48.0.0/12
42.80.0.0/12
42.96.0.0/11
42.128.0.0/9
43.224.0.0/11
45.65.16.0/20
45.112.0.0/12
45.248.0.0/13
47.92.0.0/14
47.96.0.0/11
49.0.0.0/9
49.128.0.0/11
49.192.0.0/10
52.80.0.0/14
54.222.0.0/15
58.0.0.0/9
58.128.0.0/11
58.192.0.0/11
58.240.0.0/12
59.32.0.0/11
59.64.0.0/11
59.96.0.0/12
59.144.0.0/12
59.160.0.0/11
59.192.0.0/10
60.0.0.0/11
60.48.0.0/12
60.160.0.0/11
60.192.0.0/10
61.0.0.0/10
61.80.0.0/13
61.128.0.0/10
61.224.0.0/11
91.234.36.0/24
101.0.0.0/9
101.128.0.0/11
101.192.0.0/12
101.224.0.0/11
103.0.0.0/8
106.0.0.0/9
106.224.0.0/12
110.0.0.0/9
110.144.0.0/12
110.160.0.0/11
110.192.0.0/10
111.0.0.0/10
111.64.0.0/11
111.112.0.0/12
111.128.0.0/10
111.192.0.0/11
111.224.0.0/12
112.0.0.0/9
112.128.0.0/12
112.192.0.0/14
112.224.0.0/11
113.0.0.0/9
113.128.0.0/12
113.192.0.0/10
114.16.0.0/12
114.48.0.0/12
114.64.0.0/10
114.128.0.0/12
114.192.0.0/10
115.0.0.0/8
116.0.0.0/8
117.0.0.0/9
117.128.0.0/10
118.16.0.0/12
118.64.0.0/10
118.128.0.0/9
119.0.0.0/9
119.128.0.0/10
119.224.0.0/11
120.0.0.0/10
120.64.0.0/11
120.128.0.0/12
120.192.0.0/10
121.0.0.0/9
121.192.0.0/10
122.0.0.0/7
124.0.0.0/8
125.0.0.0/9
125.160.0.0/11
125.192.0.0/10
137.59.59.0/24
137.59.88.0/22
139.0.0.0/11
139.128.0.0/9
140.64.0.0/12
140.128.0.0/12
140.192.0.0/10
144.0.0.0/13
144.12.0.0/16
144.48.0.0/13
144.123.0.0/16
144.255.0.0/16
146.196.0.0/17
150.0.0.0/16
150.96.0.0/11
150.128.0.0/12
150.192.0.0/10
152.104.128.0/17
153.0.0.0/10
153.96.0.0/11
157.0.0.0/16
157.18.0.0/16
157.61.0.0/16
157.112.0.0/12
157.144.0.0/12
157.255.0.0/16
159.226.0.0/16
160.19.0.0/16
160.20.48.0/22
160.202.0.0/16
160.238.64.0/22
161.207.0.0/16
162.105.0.0/16
163.0.0.0/10
163.96.0.0/11
163.128.0.0/10
163.192.0.0/11
164.52.0.0/17
166.111.0.0/16
167.139.0.0/16
167.189.0.0/16
167.220.244.0/22
168.160.0.0/16
170.179.0.0/16
171.0.0.0/9
171.192.0.0/11
175.0.0.0/9
175.128.0.0/10
180.64.0.0/10
180.128.0.0/9
182.0.0.0/8
183.0.0.0/10
183.64.0.0/11
183.128.0.0/9
192.124.154.0/24
192.140.128.0/17
195.78.82.0/23
202.0.0.0/9
202.128.0.0/10
202.192.0.0/11
203.0.0.0/8
210.0.0.0/10
210.64.0.0/11
210.160.0.0/11
210.192.0.0/11
211.64.0.0/13
211.80.0.0/12
211.96.0.0/13
211.136.0.0/13
211.144.0.0/12
211.160.0.0/13
216.250.108.0/22
218.0.0.0/9
218.160.0.0/11
218.192.0.0/10
219.64.0.0/11
219.128.0.0/11
219.192.0.0/10
220.96.0.0/11
220.128.0.0/9
221.0.0.0/11
221.96.0.0/11
221.128.0.0/9
222.0.0.0/8
223.0.0.0/11
223.64.0.0/10
223.128.0.0/9

但建议使用 域名拆分隧道 来过滤掉一些域名,以免你的客户访问不该看的站点。

原创文章,作者:nyarime,如若转载,请注明出处:https://blog.naixi.net/article/anylink
-- 展开阅读全文 --
0成本:免费注册 MSN.COM 邮箱
« 上一篇 11-05
记录工行牡丹国际借记卡开卡及体验
下一篇 » 11-24
发表评论

热门文章

标签TAG

热评文章