- 受疫情影响,大家线上办公的需求空前膨胀,像向日葵、Todesk等这类远程工具炙手可热。
- 这类商业产品,对个人用户虽免费,但也有诸多限制,那我们能不能自己搭建个像向日葵那样的服务端,然后我们自己使用呢。
- 当然可以。这里介绍几种实现方案。
Frp端口转发
:比如说我们把Linux的22端口或window的3389端口转发到公网服务器的一个端口,我们就可以实现远程登录Linux系统或window系统,但如果用到的端口较多,那一个一个配置也挺麻烦的,这种方式这里就不再赘述了。
OpenV
:这种方式比较古老了,性能上可能稍逊色点,但我的使用体验还行,比向日葵稳定,具体实现方式请参考【Centos7使用docke搭建openV】,IPsec
也是几十年前的解决方案了,这里也不详细介绍了。
这个也是商业软件,不过源码开源,可以自己搭建服务端,这个我自己也试验过了。
具体操作步骤可参考文章:【一分钟自建zerotier-plant】
介绍这个之前不得不说下WireGuard
,一句话:2020年1月28日,Linux之父Linus Torvalds正式将WireGuard merge到Linux 5.6版本内核主线
,其他信息可以网上查下看看;关于WireGuard 协议实现的工具有用户态实
现的Tailscale
和内核态
实现的Netmaker
,Netmaker这里就不介绍了,Tailscale呢,服务端不开源,对免费用户有诸多限制,而Headscale是一款开源实现,就是我们的主角了,这里详细记录搭建过程。搭建是基于docker的,如果拉镜像网不好,可以采用其他方式,请参考【Tailscale 基础教程:Headscale 的部署方法和使用教程】
mkdir -p /opt/headscale/
mkdir -p /opt/headscale/config
cd /opt/headscale/
version: '3.5'
services:
headscale:
image: headscale/headscale:latest-alpine
container_name: headscale
volumes:
- ./config:/etc/headscale
- ./data/data:/var/lib/headscale
ports:
- 7080:7080
command: headscale serve
restart: unless-stopped
wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O ./config/config.yaml
- server_url:server_url 这个东西是一个简单的「HTTP 设备认证页面」,后面需要暴露在公网上,其他设备如果想加入到你的网络里面,需要访问这个地址,拿到一个 Token。有域名的话推荐用域名+nginx/caddy 反向代理没域名的话用 ip+端口。
- ip_prefixes 可以根据自己控制客户端分配IP的网段。
docker exec -it 容器id /bin/sh
然后执行
headscale namespaces create wlf
简单说明下,服务端我们用headscale搭建的,客户端用的tailscale。
regedit
打开注册表编辑器,新建字符串值【UnattendedMode】=【always】和【LoginURL】=【你刚搭建的服务端的地址,即上面配置的server_url】服务端执行命令授权
(还是需要进入到容器中执行),注意修改NAMESPACE。# 第一种方法:通过服务端授权客户端,下面结合Linux客户端再介绍第二种方法:通过 Pre-Authkeys 授权客户端
headscale -n wlf nodes register --key 905cf165204800247fbd33989dbc22be95c987286c45aac3033937041150d846
110.10.0.1
,是我们指定的网段110.10.0.2
curl -fsSL https://tailscale.com/install.sh | sh
# docker-compose.yml
version: '3.3'
services:
tailscaled:
container_name: tailscaled
image: tailscale/tailscale
network_mode: host
privileged: true
restart: always
cap_add:
- net_admin
- sys_module
volumes:
- ./lib:/var/lib
- /dev/net/tun:/dev/net/tun
command: sh -c "mkdir -p /var/run/tailscale && ln -s /tmp/tailscaled.sock /var/run/tailscale/tailscaled.sock && tailscaled"
# 启动tailscale客户端容器
docker-compose up -d
通过第二种授权方法 Pre-Authkeys
加入到服务端创建的虚拟局域网wlf# 首先在服务端进入容器,创建preauthkeys,指定24h有效期,--reusable参数代表可以重复使用,不加的话用一次就废了
headscale preauthkeys create -e 24h --reusable -n wlf
# 查看创建的preauthkeys,第一个我已经把它失效了
headscale preauthkeys list -n wlf
# 然后在Linux客户端执行(如果是docker安装的需要进到容器内再执行)
# 这里推荐将 DNS 功能关闭,因为它会覆盖系统的默认 DNS。如果你对 DNS 有需求,可自己研究官方文档,这里不再赘述。
tailscale up --login-server=http://<服务端headscale的IP>:7080 --accept-routes=true --accept-dns=false --authkey 275a973c61f5ae7bb63955a648e7c3b38ac015552fe60ec1
# 最后在服务端进入容器,查看已加入的节点
headscale nodes list -n wlf
github地址:【https://github.com/gurucomputing/headscale-ui】
# docker-compose.yml
version: '3.5'
services:
headscale-ui:
image: ghcr.io/gurucomputing/headscale-ui:latest
restart: unless-stopped
container_name: headscale-ui
ports:
- 9443:443