WSL2增强,内网穿透方案:FRP与ZeroTier

1. FRP:直接对外暴露IP和端口

FRP的原理基本就是端口转发,将外部的流量经过中间服务器转发至本地机器

  • 优点

开启frp后,相当于有了公网IP,任意设备均可任意访问

  • 缺点

由于寻址多中转了两次中间服务器,就增加了丢包的可能性,并且也增大了单次访问的延迟

1.1. 配置服务端

在Linux服务器上以root用户输入:

1
2
3
4
5
6
7
8
9
10
cd /root
# 下载
wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.27.1/frp_0.27.1_linux_amd64.tar.gz
# 解压
tar -xzvf frp_0.27.1_linux_amd64.tar.gz
# 文件夹名改成 frp,不然目录太长了不方便
mv frp_0.27.1_linux_amd64 frp
cd frp
# 确保 frps 程序具有可执行权限
chmod +x frps

运行一下

1
./frps --help

编辑配置:

1
vim frps.ini

输入:

1
2
3
4
5
6
7
8
9
[common]
bind_port = 7000
token = 12345678
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 10080
vhost_https_port = 10443
subdomain_host = 【你自己的域名,好像也可以不设置这一条,在客户端直接连IP也行,不过我有域名就直接这么设置了,以后换服务器也方便】

编辑配置以开机自启:

1
vim /etc/rc.local

输入:

1
nohup /root/frp/frps -c /root/frp/frps.ini &

保险起见给文件加上权限:

1
sudo chmod +755 /etc/rc.local

1.2. 配置客户端

在WSL里新建客户端配置文件

1
vim /frp/frpc.ini

编辑配置:

1
2
3
4
5
6
7
8
9
10
11
[common]
server_addr = 【你服务器的ip或者解析到该ip的子域名,如:frp.domain.com】
server_port = 7000
token = 12345678
http_proxy =

[postgres]
type = tcp
local_ip = 127.0.0.1
local_port = 5432
remote_port = 54321

拉取docker镜像

1
docker run --restart=always --network host -d -v /frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc

2. ZeroTier:架设虚拟局域网

ZeroTier架设了一个虚拟的局域网,该网段内的所有设备均可互相访问

2.1. 注册ZeroTier

https://www.zerotier.com/

2.2. 在Networks新建一个网段

记下这个NETWORK-ID

2.3. 在WSL配置zerotier

WSL内运行

1
2
3
4
5
6
7
8
9
10
docker run \
-d \
--restart unless-stopped \
--name zerotier-one \
--device /dev/net/tun \
--net host \
--cap-add NET_ADMIN \
--cap-add SYS_ADMIN \
-v /var/lib/zerotier-one:/var/lib/zerotier-one \
henrist/zerotier-one

加入网段,【NETWORK-ID】替换为2.2.记下的NETWORK-ID

1
docker exec zerotier-one zerotier-cli join 【NETWORK-ID】

2.4. 在需要连接的地方下载客户端

https://www.zerotier.com/download/

也同样加入那个NETWORK-ID

2.5. 配置权限

在ZeroTier的Networks页面,进入刚刚新建的网段,在Members属性里面,给里面的成员的Auth属性打上勾,设置好别名

  • 优点

基本可以说是直连,速度非常非常快.

安全,不暴漏在公网,只有你能连接进来。

  • 缺点

必须在同一网段才可以互相访问,没有对公IP,外部无法无配置直接访问

Comments

You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.