AnyLink
AnyLink 是一個(gè)企業(yè)級(jí)遠(yuǎn)程辦公 sslvpn 的軟件,可以支持多人同時(shí)在線使用。
使用 AnyLink,你可以隨時(shí)隨地安全的訪問(wèn)你的內(nèi)部網(wǎng)絡(luò)。
With AnyLink, you can securely access your internal network anytime and anywhere.
Repo
github: https://github.com/bjdgyc/anylink
gitee: https://gitee.com/bjdgyc/anylink
Introduction
AnyLink 基于 ietf-openconnect 協(xié)議開(kāi)發(fā),并且借鑒了 ocserv 的開(kāi)發(fā)思路,使其可以同時(shí)兼容 AnyConnect 客戶(hù)端。
AnyLink 使用 TLS/DTLS 進(jìn)行數(shù)據(jù)加密,因此需要 RSA 或 ECC 證書(shū),可以使用私有自簽證書(shū),可以通過(guò) Let's Encrypt 和 TrustAsia 申請(qǐng)免費(fèi)的 SSL 證書(shū)。
AnyLink 服務(wù)端僅在 CentOS 7、CentOS 8、Ubuntu 18、Ubuntu 20、Ubuntu 20、AnolisOS 8 測(cè)試通過(guò),如需要安裝在其他系統(tǒng),需要服務(wù)端支持 tun/tap 功能、ip 設(shè)置命令、iptables命令。
Screenshot
Installation
沒(méi)有編程基礎(chǔ)的同學(xué)建議直接下載 release 包,從下面的地址下載 anylink-deploy.tar.gz
https://github.com/bjdgyc/anylink/releases
https://gitee.com/bjdgyc/anylink/releases
如果不會(huì)安裝,可以提供有償遠(yuǎn)程協(xié)助服務(wù)(200 CNY)。添加QQ(68492170)聯(lián)系我
也可以添加QQ群 咨詢(xún)?nèi)簝?nèi)大佬
添加QQ群①: 567510628
使用問(wèn)題
對(duì)于測(cè)試環(huán)境,可以直接進(jìn)行測(cè)試,需要客戶(hù)端取消勾選【阻止不受信任的服務(wù)器(Block connections to untrusted servers)】
對(duì)于線上環(huán)境,盡量申請(qǐng)安全的https證書(shū)(跟nginx使用的pem證書(shū)類(lèi)型一致)
群共享文件有相關(guān)客戶(hù)端軟件下載,其他版本沒(méi)有測(cè)試過(guò),不保證使用正常
其他問(wèn)題 前往查看
默認(rèn)管理后臺(tái)訪問(wèn)地址 https://host:8800 或 https://域名:8800 默認(rèn)賬號(hào)密碼 admin 123456
首次使用,請(qǐng)?jiān)跒g覽器訪問(wèn) https://域名:443 瀏覽器提示安全后,在客戶(hù)端輸入 【域名:443】 即可
自行編譯安裝
需要提前安裝好 docker
git clone https://github.com/bjdgyc/anylink.git
# docker編譯 參考軟件版本(不需要安裝)
# go 1.20.12
# node v16.20.2
# yarn 1.22.19
cd anylink
# 編譯前端
bash build_web.sh
# 編譯 anylink-deploy 發(fā)布文件
bash build.sh
# 注意使用root權(quán)限運(yùn)行
cd anylink-deploy
sudo ./anylink
# 默認(rèn)管理后臺(tái)訪問(wèn)地址
# https://host:8800
# 默認(rèn)賬號(hào) 密碼
# admin 123456
Feature
Config
示例配置文件內(nèi)有詳細(xì)的注釋?zhuān)鶕?jù)注釋填寫(xiě)配置即可。
# 查看幫助信息
./anylink -h
# 生成后臺(tái)密碼
./anylink tool -p 123456
# 生成jwt密鑰
./anylink tool -s
# 查看所有配置項(xiàng)
./anylink tool -d
數(shù)據(jù)庫(kù)配置示例
數(shù)據(jù)庫(kù)表結(jié)構(gòu)自動(dòng)生成,無(wú)需手動(dòng)導(dǎo)入(請(qǐng)賦予 DDL 權(quán)限)
db_type
db_source sqlite3
./conf/anylink.db
mysql
user:password@tcp(127.0.0.1:3306)/anylink?charset=utf8 user:password@tcp(127.0.0.1:3306)/anylink?charset=utf8mb4
postgres
postgres://user:password@localhost/anylink?sslmode=verify-full
mssql
sqlserver://user:password@localhost?database=anylink&connection+timeout=30
示例配置文件
conf/server-sample.toml
Upgrade
升級(jí)前請(qǐng)備份配置文件conf
目錄 和 數(shù)據(jù)庫(kù),并停止服務(wù)
使用新版的 anylink
二進(jìn)制文件替換舊版
重啟服務(wù)后,即可完成升級(jí)
Setting
依賴(lài)設(shè)置
服務(wù)端依賴(lài)安裝:
centos: yum install iptables iproute
ubuntu: apt-get install iptables iproute2
link_mode 設(shè)置
以下參數(shù)必須設(shè)置其中之一
網(wǎng)絡(luò)模式選擇,需要配置 link_mode
參數(shù),如 link_mode="tun"
,link_mode="macvtap"
,link_mode="tap"(不推薦)
等參數(shù)。 不同的參數(shù)需要對(duì)服務(wù)器做相應(yīng)的設(shè)置。
建議優(yōu)先選擇 tun 模式,其次選擇 macvtap 模式,因客戶(hù)端傳輸?shù)氖?IP 層數(shù)據(jù),無(wú)須進(jìn)行數(shù)據(jù)轉(zhuǎn)換。 tap 模式是在用戶(hù)態(tài)做的鏈路層到 IP 層的數(shù)據(jù)互相轉(zhuǎn)換,性能會(huì)有所下降。 如果需要在虛擬機(jī)內(nèi)開(kāi)啟 tap 模式,請(qǐng)確認(rèn)虛擬機(jī)的網(wǎng)卡開(kāi)啟混雜模式。
tun 設(shè)置
開(kāi)啟服務(wù)器轉(zhuǎn)發(fā)
# 新版本支持自動(dòng)設(shè)置ip轉(zhuǎn)發(fā)
# file: /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 執(zhí)行如下命令
sysctl -w net.ipv4.ip_forward=1
# 查看設(shè)置是否生效
cat /proc/sys/net/ipv4/ip_forward
2.1 設(shè)置 nat 轉(zhuǎn)發(fā)規(guī)則(二選一)
systemctl stop firewalld.service
systemctl disable firewalld.service
# 新版本支持自動(dòng)設(shè)置nat轉(zhuǎn)發(fā),如有其他需求可以參考下面的命令配置
# 請(qǐng)根據(jù)服務(wù)器內(nèi)網(wǎng)網(wǎng)卡替換 eth0
# iptables -t nat -A POSTROUTING -s 192.168.90.0/24 -o eth0 -j MASQUERADE
# 如果執(zhí)行第一個(gè)命令不生效,可以繼續(xù)執(zhí)行下面的命令
# iptables -A FORWARD -i eth0 -s 192.168.90.0/24 -j ACCEPT
# 查看設(shè)置是否生效
# iptables -nL -t nat
2.2 使用全局路由轉(zhuǎn)發(fā)(二選一)
# 假設(shè)anylink所在服務(wù)器的內(nèi)網(wǎng)ip: 10.1.2.10
# 首先關(guān)閉nat轉(zhuǎn)發(fā)功能
iptables_nat = false
# 傳統(tǒng)網(wǎng)絡(luò)架構(gòu),在華三交換機(jī)添加以下靜態(tài)路由規(guī)則
ip route-static 192.168.90.0 255.255.255.0 10.1.2.10
# 其他品牌的交換機(jī)命令,請(qǐng)參考以下地址
https://cloud.tencent.com/document/product/216/62007
# 公有云環(huán)境下,需設(shè)置vpc下的路由表,添加以下路由策略
目的端: 192.168.90.0/24
下一跳類(lèi)型: 云服務(wù)器
下一跳: 10.1.2.10
使用 AnyConnect 客戶(hù)端連接即可
橋接設(shè)置
設(shè)置配置文件
macvtap 設(shè)置相對(duì)比較簡(jiǎn)單,只需要配置相應(yīng)的參數(shù)即可。
網(wǎng)絡(luò)要求:需要網(wǎng)絡(luò)支持 ARP 傳輸,可通過(guò) ARP 宣告普通內(nèi)網(wǎng) IP。
網(wǎng)絡(luò)限制:云環(huán)境下不能使用,網(wǎng)卡mac加白環(huán)境不能使用,802.1x認(rèn)證網(wǎng)絡(luò)不能使用
以下參數(shù)可以通過(guò)執(zhí)行 ip a
查看
1.1 arp_proxy
# file: /etc/sysctl.conf
net.ipv4.conf.all.proxy_arp = 1
#執(zhí)行如下命令
sysctl -w net.ipv4.conf.all.proxy_arp=1
配置文件修改:
# 首先關(guān)閉nat轉(zhuǎn)發(fā)功能
iptables_nat = false
link_mode = "tun"
#內(nèi)網(wǎng)主網(wǎng)卡名稱(chēng)
ipv4_master = "eth0"
#以下網(wǎng)段需要跟ipv4_master網(wǎng)卡設(shè)置成一樣
ipv4_cidr = "10.1.2.0/24"
ipv4_gateway = "10.1.2.99"
ipv4_start = "10.1.2.100"
ipv4_end = "10.1.2.200"
1.2 macvtap
# 命令行執(zhí)行 master網(wǎng)卡需要打開(kāi)混雜模式
ip link set dev eth0 promisc on
#=====================#
# 配置文件修改
# 首先關(guān)閉nat轉(zhuǎn)發(fā)功能
iptables_nat = false
link_mode = "macvtap"
#內(nèi)網(wǎng)主網(wǎng)卡名稱(chēng)
ipv4_master = "eth0"
#以下網(wǎng)段需要跟ipv4_master網(wǎng)卡設(shè)置成一樣
ipv4_cidr = "10.1.2.0/24"
ipv4_gateway = "10.1.2.1"
ipv4_start = "10.1.2.100"
ipv4_end = "10.1.2.200"
Deploy
部署配置文件放在 deploy
目錄下,請(qǐng)根據(jù)實(shí)際情況修改配置文件
Systemd
添加 anylink 程序
首先把 anylink-deploy
文件夾放入 /usr/local/anylink-deploy
添加執(zhí)行權(quán)限 chmod +x /usr/local/anylink-deploy/anylink
把 anylink.service
腳本放入:
centos: /usr/lib/systemd/system/
ubuntu: /lib/systemd/system/
操作命令:
加載配置: systemctl daemon-reload
啟動(dòng): systemctl start anylink
停止: systemctl stop anylink
開(kāi)機(jī)自啟: systemctl enable anylink
Docker Compose
進(jìn)入 deploy
目錄
執(zhí)行腳本 docker-compose up
k8s
進(jìn)入 deploy
目錄
執(zhí)行腳本 kubectl apply -f deployment.yaml
Docker
anylink 鏡像地址
對(duì)于國(guó)內(nèi)用戶(hù),為提高鏡像拉取體驗(yàn),可以考慮拉取存放于阿里云鏡像倉(cāng)庫(kù)的鏡像,鏡像名稱(chēng)及標(biāo)簽如下表所示( 具體版本號(hào)可以查看 version
文件):
支持設(shè)備/平臺(tái)
DockerHub 阿里云鏡像倉(cāng)庫(kù) x86_64/amd64
bjdgyc/anylink:latest
registry.cn-hangzhou.aliyuncs.com/bjdgyc/anylink:latest
x86_64/amd64
bjdgyc/anylink:0.13.1
registry.cn-hangzhou.aliyuncs.com/bjdgyc/anylink:0.13.1
armv8/aarch64
bjdgyc/anylink:latest
registry.cn-hangzhou.aliyuncs.com/bjdgyc/anylink:arm64v8-latest
armv8/aarch64
bjdgyc/anylink:0.13.1
registry.cn-hangzhou.aliyuncs.com/bjdgyc/anylink:arm64v8-0.13.1
docker 鏡像源地址
docker.1ms.run/bjdgyc/anylink:latest
dockerhub.yydy.link:2023/bjdgyc/anylink:latest
操作步驟
獲取鏡像
# 具體tag可以從docker hub獲取
# https://hub.docker.com/r/bjdgyc/anylink/tags
docker pull bjdgyc/anylink:latest
docker pull registry.cn-hangzhou.aliyuncs.com/bjdgyc/anylink:latest
查看命令信息
docker run -it --rm bjdgyc/anylink -h
生成密碼
docker run -it --rm bjdgyc/anylink tool -p 123456
# Passwd:$2a$10$lCWTCcGmQdE/4Kb1wabbLelu4vY/cUwBwN64xIzvXcihFgRzUvH2a
生成 jwt secret
docker run -it --rm bjdgyc/anylink tool -s
# Secret:9qXoIhY01jqhWIeIluGliOS4O_rhcXGGGu422uRZ1JjZxIZmh17WwzW36woEbA
查看所有配置項(xiàng)
docker run -it --rm bjdgyc/anylink tool -d
iptables兼容設(shè)置
# 默認(rèn) iptables 使用 nf_tables 設(shè)置轉(zhuǎn)發(fā)規(guī)則,如果內(nèi)核低于 4.19 版本,需要特殊配置
docker run -itd --name anylink --privileged \
-e IPTABLES_LEGACY=on \
-p 443:443 -p 8800:8800 -p 443:443/udp \
--restart=always \
bjdgyc/anylink
啟動(dòng)容器
# 默認(rèn)啟動(dòng)
docker run -itd --name anylink --privileged \
-p 443:443 -p 8800:8800 -p 443:443/udp \
--restart=always \
bjdgyc/anylink
# 自定義配置目錄
# 首次啟動(dòng)會(huì)自動(dòng)創(chuàng)建配置文件
# 配置文件初始化完成后,容器會(huì)強(qiáng)制退出,請(qǐng)重新啟動(dòng)容器
docker run -itd --name anylink --privileged \
-p 443:443 -p 8800:8800 -p 443:443/udp \
-v /home/myconf:/app/conf \
--restart=always \
bjdgyc/anylink
docker restart anylink
使用自定義參數(shù)啟動(dòng)容器
# 參數(shù)可以參考 ./anylink tool -d
# 可以使用命令行參數(shù) 或者 環(huán)境變量 配置
docker run -itd --name anylink --privileged \
-e LINK_LOG_LEVEL=info \
-p 443:443 -p 8800:8800 -p 443:443/udp \
-v /home/myconf:/app/conf \
--restart=always \
bjdgyc/anylink \
--ip_lease=1209600 # IP地址租約時(shí)長(zhǎng)
使用非特權(quán)模式啟動(dòng)容器
# 參數(shù)可以參考 ./anylink tool -d
# 可以使用命令行參數(shù) 或者 環(huán)境變量 配置
docker run -itd --name anylink \
-p 443:443 -p 8800:8800 -p 443:443/udp \
-v /dev/net/tun:/dev/net/tun --cap-add=NET_ADMIN \
--restart=always \
bjdgyc/anylink
構(gòu)建鏡像 (非必需)
# 獲取倉(cāng)庫(kù)源碼
git clone https://github.com/bjdgyc/anylink.git
# 構(gòu)建鏡像
sh build_docker.sh
或
docker build -t anylink -f docker/Dockerfile .
常見(jiàn)問(wèn)題
請(qǐng)前往 問(wèn)題地址 查看具體信息
Support Document
Support Client
Contribution
歡迎提交 PR、Issues,感謝為 AnyLink 做出貢獻(xiàn)。
注意新建 PR,需要提交到 dev 分支,其他分支暫不會(huì)合并。
Other Screenshot
展開(kāi)查看
License
本項(xiàng)目采用 AGPL-3.0 開(kāi)源授權(quán)許可證,完整的授權(quán)說(shuō)明已放置在 LICENSE 文件中。
注意事項(xiàng) 《中華人民共和國(guó)計(jì)算機(jī)信息網(wǎng)絡(luò)國(guó)際聯(lián)網(wǎng)管理暫行規(guī)定》第六條:“計(jì)算機(jī)信息網(wǎng)絡(luò)直接進(jìn)行國(guó)際聯(lián)網(wǎng),必須使用郵電部國(guó)家公用電信網(wǎng)提供的國(guó)際出入口信道。任何單位和個(gè)人不得自行建立或者使用其他信道進(jìn)行國(guó)際聯(lián)網(wǎng)。” 根據(jù)工信部《工業(yè)和信息化部關(guān)于清理規(guī)范互聯(lián)網(wǎng)網(wǎng)絡(luò)接入服務(wù)市場(chǎng)的通知》的規(guī)定:“未經(jīng)電信主管部門(mén)批準(zhǔn),不得自行建立或租用專(zhuān)線(含虛擬專(zhuān)用網(wǎng)絡(luò)VPN )等其他信道開(kāi)展跨境經(jīng)營(yíng)活動(dòng)。” 參考文檔 bjdgyc/anylink: AnyLink是一個(gè)企業(yè)級(jí)遠(yuǎn)程辦公 ssl vpn 軟件,可以支持多人同時(shí)在線使用。基于 openconnect 協(xié)議開(kāi)發(fā),并且借鑒了 ocserv 的開(kāi)發(fā)思路,可以完全兼容 AnyConnect 客戶(hù)端。 地址:https://github.com/bjdgyc/anylink
開(kāi)源企業(yè)級(jí)遠(yuǎn)程辦公 VPN 軟件 AnyLink 的 docker 部署及使用心得 - 思有云 - IOIOX 地址:https://www.ioiox.com/archives/128.html
OpenWRT 路由器 OpenConnect VPN 詳細(xì)圖文教程 - 基礎(chǔ)配置篇 - 思有云 - IOIOX 地址:https://www.ioiox.com/archives/89.html
MAC上Cisco AnyConnect刪除不干凈,造成無(wú)法重新安裝的解決辦法 - 簡(jiǎn)書(shū) 地址:https://www.jianshu.com/p/8cf02bfa0388
該文章在 2025/4/11 9:31:22 編輯過(guò)