Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VyOS 部署 AnyLink SSLVPN 多种网络模式详解 #350

Open
yangpin97 opened this issue Dec 8, 2024 · 0 comments
Open

VyOS 部署 AnyLink SSLVPN 多种网络模式详解 #350

yangpin97 opened this issue Dec 8, 2024 · 0 comments

Comments

@yangpin97
Copy link

yangpin97 commented Dec 8, 2024

文章介绍:使用当前最新滚动版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)。

本篇文章博主的官方博客: https://yangpin.link

一、项目来源

1.1、Gitee-bjdgyc

bjdgyc/anylink

1.2、GitHub-bjdgyc

bjdgyc/anylink

二、部署准备

2.1、vyos镜像

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

2.5.2、AnyLink Client

yydy_2024-08-27_23-49-35

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

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地址走隧道。

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
@bjdgyc bjdgyc pinned this issue Dec 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant