-
-
Notifications
You must be signed in to change notification settings - Fork 413
VyOS 部署 AnyLink SSLVPN 多种网络模式详解
文章介绍:使用当前最新滚动版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 设置等命令。
本篇文章博主的官方博客: https://yangpin.link
vyos-1.5-rolling-202408250024-generic-amd64.iso
anylink-0.12.2-linux-amd64.tar.gz
anylink-0.12.2-linux-amd64.tar.gz
最新版本v0.12.2支持不用域名连接,可以直接用IP+端口模式连接,如果是企业使用建议用域名,并申请安全证书。
Namesilo最便宜的域名一年不到15元(申请后托管cloudflare)
ClouDNS,每个账户提供一个免费的二级域名(申请后托管cloudflare)
如果你安装AnyLink只是在内网使用可以没有公网IP,如果你要从公网拨号访问内网,则需要公网IP,如果你的公司出口没有公网IP,你可以选择使用FRP,NPS等内网穿透工具,本期不做介绍。
下面的链接由博主提供免费Cisco官网的最新客户端软件,和免费开源的OpenConnect客户端下载地址,以及使用指导。
该软件是GitHub一位项目开发者专门为AnyLink开发的客户端(仅支持Windwos,macOS,Linux)。
AnyLink SSLVPN支持用户名密码+六位数字动态令牌认证。
如果你不会使用VMware安装vyos系统,请先查看如下教程。
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
sudo -i
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
sudo tar -zxvf /tmp/anylink-0.12.2-linux-amd64.tar.gz
sudo mv anylink-deploy/ /usr/local/
sudo chmod +x /usr/local/anylink-deploy/anylink
sudo cp /usr/local/anylink-deploy/deploy/anylink.service /etc/systemd/system
sudo chmod +x /etc/systemd/system/anylink.service
sudo systemctl enable anylink
sudo cd /usr/local/anylink-deploy
请把你的”Passwd:“后面的都复制到记事本,这就是abc@123加密后的密文,稍后需要用来替换服务端配置文件。
./anylink tool -p abc@123
Passwd:$2a$10$eO7aH3twg6xzsw/oY29ki9Joic8wrsF4ZhufVmGxVkC38h0jtn.dbK
请把你的”Secret:“后面的都复制到记事本,这就是jwt加密后的密文,稍后需要用来替换服务端配置文件。
./anylink tool -s
Secret:sjjP3Me68K-ppXe-au4MppLifqbEgLu19gc1fl7DrZpBcE5donOPCgqer
如果开启了totp动态令牌认证登录,则登录AnyLink控制台的密码将变成:abc@123+六位数字(中间没有:”+“号) 请把你的”Otp:“后面的都复制到记事本,这就是totp加密后的密文,稍后需要用来替换服务端配置文件。
./anylink tool -o
Otp:35TQE2F2AHYR6B3CKOXZVSZGGKLNLIM5HJ6VDG2TOEVRAGY3SVF5A
sudo cd conf/
sudo cp server-sample.toml server.toml
sudo nano server.toml
这个profile_name的用处是当你有多台AnyLink服务器时,可以定义好客户端显示的连接名称,当客户端第一次连接后,会下载一个名为:profile_vpn_tun.xml的配置文件,这个文件可以提前在AnyLink服务端中配置好,请参考拓展部分。
profile_name = "vpn_tun"
log_path = "./log"
issuer = "YYDY-AnyLink-SSLVPN"
admin_user = "yydy"
把上面5.2步骤的密文复制到双引号里面,把旧的删除。
admin_pass = "$2a$10$UQ7C.EoPifDeJh6d8.31TeSPQU7hM/NOM2nixmBucJpAuXDQNqNke"
把上面5.3步骤的密文复制到双引号里面,把旧的删除。
jwt_secret = "abcdef.0123456789.abcdef"
把上面5.4步骤的密文复制到双引号里面。
admin_otp = ""
server_addr = ":10443"
如果选择:true开启,则dtls端口建议和tcp业务端口一致
#开启 DTLS
server_dtls = true
#UDP监听地址
server_dtls_addr = ":10443"
admin_addr = ":8800"
保持默认即可,这个功能猜测是为了日志审计用的
proxy_protocol = false
link_mode = "tun"
默认是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"
max_client = 200
max_user_client = 3
ip_lease = 86400
这个用户组是稍后去控制台自定义的,此处定义客户端拨号默认连接内网LAN
default_group = "LAN"
默认即可,dpd > keepalive
cstp_keepalive = 3
cstp_dpd = 20
mobile_keepalive = 4
mobile_dpd = 60
mtu = 1460
有内网域名时填写内网域名的主域名
default_domain = "yangpin.link"
idle_timeout = 0
session_timeout = 3600
auth_timeout = 0
audit_interval = 600
show_sql = false
当选择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
开启压缩可以节省带宽和加快传输速度,网络延迟大网络带宽小建议开启,但开启会增加服务器的 CPU 负载,因为压缩和解压缩操作需要额外的计算资源。
compression = false
no_compress_limit = 256
线上环境慎开启。
display_error = false
默认开启也就是排除,当客户端流量全局走隧道时需要用到这里,关闭后会使拨号的IP地址走隧道。
exclude_export_ip = true
sudo systemctl start anylink
sudo systemctl restart anylink
关闭NAT模式,除了iptables_nat 是 false之外,其他配置与上面的模版皆相同。
link_mode = "tun"
当选择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'
去目标网段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
sudo systemctl start anylink
sudo systemctl restart anylink
ARP代理模式,除了NAT要求关闭和客户端虚拟IP跟上面的不一样以外,其他与上面的配置模版皆相同。
link_mode = "tun"
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'
使用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"
configure
set system sysctl parameter net.ipv4.conf.all.proxy_arp value 1
commit
save
echo "net.ipv4.conf.all.proxy_arp = 1" | sudo tee -a /etc/sysctl.conf
sudo systemctl start anylink
sudo systemctl restart anylink
桥接模式,1、NAT要求关闭,2、客户端虚拟IP,3、网络模式不同,其他与上面的配置模版皆相同。
sudo ip link set dev eth0 promisc on
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'
link_mode = "macvtap"
当网络模式选择桥接模式时,客户端虚拟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"
sudo systemctl start anylink
sudo systemctl restart anylink
主要介绍部分实用功能,其他未介绍的功能请看官方文档。
这里以qq邮箱为例。
这里我是使用Let's Encrypt,使用托管到cloudflare的域名进行证书申请,我直接截图重点位置,就是DNS的token获取,下面所有操作完后,点击保存获得到一串token字段,请保存好。
把里面默认的俩个删除(all和ops),然后自己新建。
普通用户组只下发内网明细路由走隧道。
通用
DNS说明
认证方式
路由设置
权限控制
域名拆分隧道
全局用户组下发八个零的默认路由,全部路由走隧道。
域名用户组指定域名走隧道。
访问内网和访问公网,源地址都是192.168.6.117
LAN用户权限只能访问内网192.168.6.0/24网段,且不能访问192.168.6.254的tcp23端口,访问192.168.6.254其他端口正常。
ALL用户权限是所有流量都走vpn隧道。
FAST组用户权限是只有指定的FAST域名流量如谷歌和油管走vpn,其他默认走本地。
访问内网,源地址为100.64.64.0/24(如果要访问公网,需要在出口路由器网关上配置回程路由,并配置SNAT,否则全局模式无法上网)
访问内网一台PC的3389端口,然后抓包看源地址。
访问内网和公网源地址都是192.168.6.0/24网段,和内网是二层直连模式。
访问内网和公网源地址都是192.168.6.0/24网段,和内网是二层直连模式。
关于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解析的类似应用程序之外的所有应用程序)执行。
sudo cd /usr/local/anylink-deploy/conf
sudo nano profile.xml
定义好HostName,以及HostAddress然后保存。
客户端拨号成功后,会自动下载配置文件到客户端本地
C:\ProgramData\Cisco\Cisco Secure Client\VPN\Profile
/opt/cisco/anyconnect/profile
客户端全局模式拨号成功后,发现在cmd内ping域名正常,网页用ip访问正常,但是用域名无法访问,请在vyos的上网口添加mtu和mss。
set interfaces ethernet eth0 mtu 1476
set interfaces ethernet eth0 ip adjust-mss 1200