文章介绍:使用当前最新滚动版vyos-1.5.0部署AnyLink SSLVPN,AnyLink是一个企业级SSLVPN软件,可以支持多人同时在线使用。基于 openconnect 协议开发,并且借鉴了 ocserv 的开发思路,可以完全兼容 AnyConnect 客户端,AnyLink 使用 TLS/DTLS 进行数据加密,因此需要 RSA 或 ECC 证书,可以通过 Let's Encrypt 和 TrustAsia 申请免费的 SSL 证书,AnyLink 服务端支持Centos,Ubuntu,Debian等系统,如需要安装在其他系统,需要服务端支持 tun/tap 功能、ip 设置等命令。

本期将详细介绍不同网络模式的配置方式,包括以下(tun模式:开启iptables_nat、不开启iptables_nat、arp代理;桥接模式:macvtap)。

一、项目来源

1.1、Gitee-bjdgyc

bjdgyc/anylink

1.2、GitHub-bjdgyc

bjdgyc/anylink

二、部署准备

2.1、vyos镜像

vyos-1.5-rolling-202408250024-generic-amd64.iso vyos-1.5-rolling-202408250024-generic-amd64.iso

2.2、anylink服务端

anylink-0.12.2-linux-amd64.tar.gz anylink-0.12.2-linux-amd64.tar.gz

2.3、一个域名(可选)

最新版本v0.12.2支持不用域名连接,可以直接用IP+端口模式连接,如果是企业使用建议用域名,并申请安全证书。

Namesilo最便宜的域名一年不到15元(申请后托管cloudflare)

ClouDNS,每个账户提供一个免费的二级域名(申请后托管cloudflare)

2.4、一个公网IP(可选)

如果你安装AnyLink只是在内网使用可以没有公网IP,如果你要从公网拨号访问内网,则需要公网IP,如果你的公司出口没有公网IP,你可以选择使用FRP,NPS等内网穿透工具,本期不做介绍。

2.5、VPN客户端

2.5.1、Cisco Secure Client

下面的链接由博主提供免费Cisco官网的最新客户端软件,和免费开源的OpenConnect客户端下载地址,以及使用指导。

点我下载:Cisco Secure Client

该软件是GitHub一位项目开发者专门为AnyLink开发的客户端(仅支持Windwos,macOS,Linux)。

yydy_2024-08-27_23-49-35

github-主页-anylink-client

点我下载:AnyLink Client

2.6、TOTP动态令牌

AnyLink SSLVPN支持用户名密码+六位数字动态令牌认证。

2.6.1、安卓动态令牌

Andoid

2.6.2、苹果动态令牌

iOS

2.7、SSH工具

MobaXterm

三、安装VyOS

3.1、安装

如果你不会使用VMware安装vyos系统,请先查看如下教程。

【Vyos-开源篇-1】- VMware安装vyos虚拟机

3.2、基础配置

yydy_2024-08-25_18-38-48

configure
set interfaces ethernet eth0 address '192.168.6.117/24'
set protocols static route 0.0.0.0/0 next-hop 192.168.6.254
set service ntp server ntp1.aliyun.com
set service ssh port '22'
set system host-name 'AnyLink'
set system login banner post-login 'Welcome YYDY-AnyLink-SSLVPN'
set system login user sslvpn authentication encrypted-password anylink
set system name-server '192.168.100.3'
set system name-server '192.168.100.4'
set system time-zone 'Asia/Shanghai'
commit
save

四、安装AnyLink

4.1、进入root模式

sudo -i

4.2、拉取文件

sudo wget -P /tmp https://gitee.com/bjdgyc/anylink/releases/download/v0.12.2/anylink-0.12.2-linux-amd64.tar.gz
sudo wget -P /tmp https://github.com/bjdgyc/anylink/releases/download/v0.12.2/anylink-0.12.2-linux-amd64.tar.gz

4.3、解压文件

sudo tar -zxvf /tmp/anylink-0.12.2-linux-amd64.tar.gz

4.4、移动文件

sudo mv anylink-deploy/ /usr/local/

4.5、赋予权限

sudo chmod +x /usr/local/anylink-deploy/anylink

4.6、复制服务文件

sudo cp /usr/local/anylink-deploy/deploy/anylink.service /etc/systemd/system

4.7、赋予权限

sudo chmod +x /etc/systemd/system/anylink.service

4.8、开机自启

sudo systemctl enable anylink

五、自定义AnyLink

5.1、进入文件目录

sudo cd /usr/local/anylink-deploy

5.2、创建新密码(必改)

请把你的”Passwd:“后面的都复制到记事本,这就是abc@123加密后的密文,稍后需要用来替换服务端配置文件。

./anylink tool -p abc@123
Passwd:$2a$10$eO7aH3twg6xzsw/oY29ki9Joic8wrsF4ZhufVmGxVkC38h0jtn.dbK

5.3、创建jwt密钥(必改)

请把你的”Secret:“后面的都复制到记事本,这就是jwt加密后的密文,稍后需要用来替换服务端配置文件。

./anylink tool -s
Secret:sjjP3Me68K-ppXe-au4MppLifqbEgLu19gc1fl7DrZpBcE5donOPCgqer

5.4、创建动态令牌(可选)

如果开启了totp动态令牌认证登录,则登录AnyLink控制台的密码将变成:abc@123+六位数字(中间没有:”+“号)
请把你的”Otp:“后面的都复制到记事本,这就是totp加密后的密文,稍后需要用来替换服务端配置文件。

./anylink tool -o
Otp:35TQE2F2AHYR6B3CKOXZVSZGGKLNLIM5HJ6VDG2TOEVRAGY3SVF5A

六、TUN网络模式,开启NAT

yydy_2024-08-25_16-09-24

6.1、进入conf目录

sudo cd conf/

6.2、拷贝模版

sudo cp server-sample.toml server.toml

6.3、编辑server.toml

sudo nano server.toml

6.3.1、修改profile_name(建议)

这个profile_name的用处是当你有多台AnyLink服务器时,可以定义好客户端显示的连接名称,当客户端第一次连接后,会下载一个名为:profile_vpn_tun.xml的配置文件,这个文件可以提前在AnyLink服务端中配置好,请参考拓展部分。

profile_name = "vpn_tun"

6.3.2、开启日志(可选)

log_path = "./log"

6.3.3、修改issuer(建议)

issuer = "YYDY-AnyLink-SSLVPN"

6.3.4、修改管理员账户(可选)

admin_user = "yydy"

6.3.5、修改密码(必改)

把上面5.2步骤的密文复制到双引号里面,把旧的删除。

admin_pass = "$2a$10$UQ7C.EoPifDeJh6d8.31TeSPQU7hM/NOM2nixmBucJpAuXDQNqNke"

6.3.6、修改jwt(必改)

把上面5.3步骤的密文复制到双引号里面,把旧的删除。

jwt_secret = "abcdef.0123456789.abcdef"

6.3.7、开启otp(可选)

把上面5.4步骤的密文复制到双引号里面。

admin_otp = ""

6.3.8、修改TCP监听端口(可选)

server_addr = ":10443"

6.3.9、修改DTLS(可选)

如果选择:true开启,则dtls端口建议和tcp业务端口一致

#开启 DTLS
server_dtls = true
#UDP监听地址
server_dtls_addr = ":10443"

6.3.10、修改控制台端口(可选)

admin_addr = ":8800"

6.3.11、tcp代理协议(可选)

保持默认即可,这个功能猜测是为了日志审计用的

proxy_protocol = false

6.3.12、网络模式

link_mode = "tun"

6.3.13、客户端虚拟IP(可选)

默认是192.168.90.0/24,如果和内网冲突请修改,vyos部署时下面的ipv4_master默认就是eth0,如果是linux部署,请使用"ip ad"查看服务器上网网卡名称

ipv4_master = "eth0"
ipv4_cidr = "100.64.64.0/24"
ipv4_gateway = "100.64.64.254"
ipv4_start = "100.64.64.1"
ipv4_end = "100.64.64.253"

6.3.14、客户端接入数(可选)

max_client = 200

6.3.15、单用户并发数(可选)

max_user_client = 3

6.3.16、IP租赁时间(可选)

ip_lease = 86400

6.3.17、默认用户组(可选)

这个用户组是稍后去控制台自定义的,此处定义客户端拨号默认连接内网LAN

default_group = "LAN"

6.3.18、客户端失效检测时间(可选)

默认即可,dpd > keepalive

cstp_keepalive = 3
cstp_dpd = 20
mobile_keepalive = 4
mobile_dpd = 60

6.3.19、最大传输单元(可选)

mtu = 1460

6.3.20、默认搜索域(可选)

有内网域名时填写内网域名的主域名

default_domain = "yangpin.link"

6.3.21、超时断开时间(可选)

idle_timeout = 0

6.3.22、会话过期时间(可选)

session_timeout = 3600

6.3.23、认证超时时间(可选)

auth_timeout = 0

6.3.24、审计间隔时间(可选)

audit_interval = 600

6.3.25、查看数据库(可选)

show_sql = false

6.3.26、添加nat(开启)

当选择true时,拨号客户端访问内网时将被nat成192.168.6.117,内网系统看到的访问源是192.168.6.117

iptables_nat = true
configure
set nat source rule 1000 outbound-interface name 'eth0'
set nat source rule 1000 source address '100.64.64.0/24'
set nat source rule 1000 translation address 'masquerade'
save

6.3.27、压缩(可选)

开启压缩可以节省带宽和加快传输速度,网络延迟大网络带宽小建议开启,但开启会增加服务器的 CPU 负载,因为压缩和解压缩操作需要额外的计算资源。

compression = false
no_compress_limit = 256

6.3.28、客户端显示详细错误信息(可选)

线上环境慎开启。

display_error = false

6.3.29、排除出口ip路由(可选)

默认开启也就是排除,当客户端流量全局走隧道时需要用到这里,如果关闭会导致拨号的IP地址123.123.123.123,除了拨号端口10433能通外,其余端口都不通。

exclude_export_ip = true

6.4、开启服务

sudo systemctl start anylink

6.5、重启服务

sudo systemctl restart anylink

七、TUN网络模式,关闭NAT

关闭NAT模式,除了iptables_nat 是 false之外,其他配置与上面的模版皆相同。

yydy_2024-08-25_16-15-06

7.1、网络模式

link_mode = "tun"

7.2、关闭nat(不开启)

当选择false时,拨号客户端访问内网时将用虚拟地址100.64.64.150为源IP,此时需要在内网网关设备上添加回程路由

iptables_nat = false

说明:VyOS不开启NAT方式就是下面的命令不配置。

set nat source rule 1000 outbound-interface name 'eth0'
set nat source rule 1000 source address '100.64.64.0/24'
set nat source rule 1000 translation address 'masquerade'

7.3、华为交换机添加静态路由

去目标网段100.64.64.0/24下一跳丢给anylink服务器的eth0口ip

ip route-static 100.64.64.0 255.255.255.0 192.168.6.117 description to-anylink-virtual-ip

7.4、开启服务

sudo systemctl start anylink

7.5、重启服务

sudo systemctl restart anylink

八、TUN网络模式,ARP代理

ARP代理模式,除了NAT要求关闭和客户端虚拟IP跟上面的不一样以外,其他与上面的配置模版皆相同。

yydy_2024-08-26_23-22-53

8.1、网络模式

link_mode = "tun"

8.2、关闭nat(不开启)

iptables_nat = false

说明:VyOS不开启NAT方式就是下面的命令不配置。

set nat source rule 1000 outbound-interface name 'eth0'
set nat source rule 1000 source address '100.64.64.0/24'
set nat source rule 1000 translation address 'masquerade'

8.3、客户端虚拟IP

使用ARP代理模式时,客户端虚拟IP地址需要保持和vyos的eth0口同网段,也就是和内网同网段,ipv4_gateway不能是网关地址,是eth0口网段的一个随机地址例如:192.168.6.252(且192.168.6.252这个地址也不能提前被内网占用),ipv4_start和ipv4_end地址范围自定义,但是需要在华为核心交换机中把anylink下发的这个地址范围做排除下发,否则会导致IP地址冲突,如果华为核心交换机中对192.168.6.0/24网段没有配置dhcp,可以忽略,此时用户拨号连接内网就相当于一根网线直连华为核心交换机。

ipv4_master = "eth0"
ipv4_cidr = "192.168.6.0/24"
ipv4_gateway = "192.168.6.252"
ipv4_start = "192.168.6.150"
ipv4_end = "192.168.6.250"

8.4、开启ARP代理

8.4.1、vyos命令

configure
set system sysctl parameter  net.ipv4.conf.all.proxy_arp value 1
commit
save

8.4.2、linux命令

echo "net.ipv4.conf.all.proxy_arp = 1" | sudo tee -a /etc/sysctl.conf

8.5、开启服务

sudo systemctl start anylink

8.6、重启服务

sudo systemctl restart anylink

九、BR桥接模式,macVTAP

桥接模式,1、NAT要求关闭,2、客户端虚拟IP,3、网络模式不同,其他与上面的配置模版皆相同。

yydy_2024-08-25_16-01-38

9.1、ESXi开启ETH0口混杂模式

yydy_2024-08-25_18-45-19

9.2、VyOS开启ETH0口混杂模式

sudo ip link set dev eth0 promisc on

9.3、关闭nat(不开启)

iptables_nat = false

说明:VyOS不开启NAT方式就是下面的命令不配置。

set nat source rule 1000 outbound-interface name 'eth0'
set nat source rule 1000 source address '100.64.64.0/24'
set nat source rule 1000 translation address 'masquerade'

9.4、网络模式

link_mode = "macvtap"

9.5、客户端虚拟IP

当网络模式选择桥接模式时,客户端虚拟IP地址需要保持和vyos的eth0口同网段,也就是和内网同网段,ipv4_gateway必须是网关地址,也就是图中vlanif6:192.168.6.254,ipv4_start和ipv4_end地址范围自定义,但是需要在华为核心交换机中把anylink下发的这个地址范围做排除下发,否则会导致IP地址冲突,如果华为核心交换机中对192.168.6.0/24没有配置dhcp,可以忽略,此时用户拨号连接内网就相当于一根网线直连华为核心交换机。

ipv4_master = "eth0"
ipv4_cidr = "192.168.6.0/24"
ipv4_gateway = "192.168.6.254"
ipv4_start = "192.168.6.150"
ipv4_end = "192.168.6.250"

9.6、开启服务

sudo systemctl start anylink

9.7、重启服务

sudo systemctl restart anylink

十、Web功能配置

主要介绍部分实用功能,其他未介绍的功能请看官方文档。

10.1、基础信息配置

这里以qq邮箱为例。

10.1.1、邮箱配置

yydy_2024-03-26_23-00-52

yydy_2024-03-26_23-00-00

yydy_2024-03-26_22-58-14

10.1.2、证书设置

这里我是使用Let's Encrypt,使用托管到cloudflare的域名进行证书申请,我直接截图重点位置,就是DNS的token获取,下面所有操作完后,点击保存获得到一串token字段,请保存好。

yydy_2024-03-26_23-31-18

yydy_2024-03-26_23-33-12

10.1.3、其他设置

yydy_2024-03-26_23-46-14

10.2、创建用户组列表

把里面默认的俩个删除(all和ops),然后自己新建。

10.2.1、删除默认组

yydy_2024-03-24_22-54-33

10.2.2、创建内网用户组

普通用户组只下发内网明细路由走隧道。

通用

yydy_2024-09-19_17-34-40

DNS说明

yydy_2024-08-26_23-44-54

认证方式

yydy_2024-08-26_00-11-30

路由设置

yydy_2024-08-26_00-14-37

权限控制

yydy_2024-09-10_17-17-10

域名拆分隧道

yydy_2024-03-24_23-17-03

10.2.3、创建全局用户组

全局用户组下发八个零的默认路由,全部路由走隧道。

yydy_2024-08-28_10-30-30

yydy_2024-08-26_00-11-30

yydy_2024-08-26_00-32-09

yydy_2024-08-26_00-32-33

yydy_2024-08-26_00-35-11

yydy_2024-08-26_00-35-37

yydy_2024-08-26_00-37-18

yydy_2024-03-24_23-17-03

10.2.4、创建域名分流用户组

域名用户组指定域名走隧道。

yydy_2024-08-26_00-41-45

yydy_2024-08-26_00-11-30

yydy_2024-08-26_00-43-49

yydy_2024-08-26_00-37-18

yydy_2024-08-26_00-47-21

10.3、创建用户

yydy_2024-08-26_01-06-22

yydy_2024-08-26_01-07-09

yydy_2024-03-26_23-57-00

戌、客户端测试

11.1、tun模式,开启nat

访问内网和访问公网,源地址都是192.168.6.117

11.1.1、测试LAN组

LAN用户权限只能访问内网192.168.6.0/24网段,且不能访问192.168.6.254的tcp23端口,访问192.168.6.254其他端口正常。

11.1.1.1、tracert测试

yydy_2024-08-27_00-26-07

11.1.1.2、ping测试

yydy_2024-08-27_00-26-32

11.1.1.3、tcping测试

yydy_2024-08-27_00-27-33

11.1.2、测试ALL组

ALL用户权限是所有流量都走vpn隧道。

11.1.2.1、tracert测试

yydy_2024-08-27_00-29-36

11.1.3、测试FAST组

FAST组用户权限是只有指定的FAST域名流量如谷歌和油管走vpn,其他默认走本地。

11.1.3.1、tracert测试

yydy_2024-08-27_00-32-00

11.2、tun模式,关闭nat

访问内网,源地址为100.64.64.0/24(如果要访问公网,需要在出口路由器网关上配置回程路由,并配置SNAT,否则全局模式无法上网)

11.2.1、测试LAN组

访问内网一台PC的3389端口,然后抓包看源地址。

yydy_2024-08-27_00-53-12

11.3、tun模式,arp代理

访问内网和公网源地址都是192.168.6.0/24网段,和内网是二层直连模式。

11.3.1、测试LAN组

11.3.1.1、tracert测试

yydy_2024-08-27_01-03-25

11.3.1.2、ping测试

yydy_2024-08-27_00-26-32

11.3.1.3、tcping测试

yydy_2024-08-27_00-27-33

11.3.2、测试ALL组

11.3.2.1、tracert测试

yydy_2024-08-27_01-05-35

11.3.3、测试FAST组

11.3.3.1、tracert测试

yydy_2024-08-27_01-07-45

11.4、br模式,macvtap

访问内网和公网源地址都是192.168.6.0/24网段,和内网是二层直连模式。

11.4.1、测试LAN组

11.4.1.1、tracert测试

yydy_2024-08-27_01-26-48

11.4.1.2、ping测试

yydy_2024-08-27_01-27-20

11.4.1.3、tcping测试

yydy_2024-08-27_01-28-41

11.4.2、测试ALL组

11.4.2.1、tracert测试

yydy_2024-08-27_01-30-19

11.4.3、测试FAST组

11.4.3.1、tracert测试

yydy_2024-08-27_01-32-10

打、拓展

12.1、DNS解析问题

关于AnyLink下发的客户端DNS与内网域名、隧道拆分域名的关系请参考下图。

在客户端上测试域名解析时,请避免使用nslookup,相反,请依赖浏览器的nslookup(1、chrome://net-internals/#dns;2、edge://net-internals/#dns)或使用ping命令。这是因为nslookup不依赖于操作系统DNS解析器。AnyConnect不会通过特定接口强制DNS请求,但根据拆分DNS配置允许或拒绝该请求。为了强制DNS解析器尝试请求的可接受DNS服务器,切分DNS测试必须仅对依赖本地DNS解析器进行域名解析的应用程序(例如,除nslookup、dig和自身处理DNS解析的类似应用程序之外的所有应用程序)执行。

yydy_2024-08-27_15-20-48

yydy_2024-08-25_22-29-20

yydy_2024-08-25_23-38-22

12.2、profile_name配置

sudo cd /usr/local/anylink-deploy/conf
sudo nano profile.xml

定义好HostName,以及HostAddress然后保存。

yydy_2024-08-27_00-01-02

客户端拨号成功后,会自动下载配置文件到客户端本地

C:\ProgramData\Cisco\Cisco Secure Client\VPN\Profile
/opt/cisco/anyconnect/profile

yydy_2024-08-27_00-10-02

12.3、全局模式打不开网页

客户端全局模式拨号成功后,发现在cmd内ping域名正常,网页用ip访问正常,但是用域名无法访问,请在vyos的上网口添加mtu和mss。

set interfaces ethernet eth0 mtu 1476
set interfaces ethernet eth0 ip adjust-mss 1200