内网穿透
Headscale
Wireguard
Zerotier—zerotier 创建根服务器只能使用 ip,这对迁移不是非常方便
Headscale 异地组网
一、搭建headscale服务端
1.创建相关文件并配置
这里需要手动创建 db.sqlite,这是根服务器的数据库文件。另外,还需要下载官网给的配置文件示例,然后需要修改一部分。
mkdir -p /home/docker/headscale/config && \
mkdir -p /home/docker/headscale/data && \
touch /home/docker/headscale/data/db.sqlite && \
wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /home/docker/headscale/config/config.yaml
修改相关配置文件,比如配置文件中配置 127.0.0.1 的话,那么就只能本机访问。这里修改为 0.0.0.0 那么就所有的 ip 都能访问。
sed -i 's/127.0.0.1/0.0.0.0/g' /home/docker/headscale/config/config.yaml
# 这将修改以下几个地方,其中server_url还需要另外修改
# 1. server_url: http://0.0.0.0:8080
# 2. listen_addr: 0.0.0.0:8080
# 3. metrics_listen_addr: 0.0.0.0:9090
# 4. grpc_listen_addr: 0.0.0.0:50443
另外因为server_url是对外访问和登录的地址,如果你需要使用域名并开启https,那么照我如下配置。如果你仅仅使用ip,那么这个地址修改为ip+端口的方式即可。
域名填自己的
sed -i 's#http://0.0.0.0:8080#https://headscale.amjun.com#g' /home/docker/headscale/config/config.yaml
修改 dns 配置文件,如果不进行修改,那么登录时选择接受服务器的 dns 地址就会出现域名无法解析的情况。注意,这里的 dns 地址可以有多个,如果有需要自行添加即可。
sed -i 's/1\.1\.1\.1/114.114.114.114/g' /home/docker/headscale/config/config.yaml
客户端可以通过 主机名 + 用户 + 基础域名 访问任意一台终端,所以这里修改下基础域名,根据自己的实际域名进行填写。
域名填自己的
sed -i 's/example.com/amjun.com/' /home/docker/headscale/config/config.yaml
设置客户端随机端口,这里是听见有说不开机随机端口可能出现只能加入一台客户端的情况,为了保险还是选择开启。
sed -i 's/randomize_client_port: false/randomize_client_port: true/' /home/docker/headscale/config/config.yaml
启用内嵌的derp
当然你可以使用官方提供的 derp 服务器,但如果你想搭建自己的 derp 服务器,又不想另外搭建一个 derp 服务器,那么这是有必要的。
注意:使用此 derp 服务器,需要有域名并配置 ssl,否则请参考:Docker 搭建中继服务器 derp - 纯 IP 实现 。
# /home/docker/headscale/config/config.yaml
derp:
server:
# xxx
enabled: true
# xxx
region_id: 999
# xxx
region_code: "headscale"
region_name: "Headscale Embedded DERP"
# xxx
stun_listen_addr: "0.0.0.0:3478"
enabled 选项默认为 false,需要设置为 true。
3.启动headscale服务端
docker run -d \
--name headscale \
--restart always \
-v /home/docker/headscale/config:/etc/headscale/ \
-v /home/docker/headscale/data:/var/lib/headscale \
-p 8080:8080 \
-p 9090:9090 \
-p 3478:3478/udp \
--restart always \
headscale/headscale:0.22.3 \
headscale serve
下面是一些相关的命令:
以前是 namespace 的概念,现在似乎改为 user 了。
# 查看用户
docker exec -it headscale headscale users ls
# 创建用户
docker exec -it headscale headscale users create hz
# 生成apikey
docker exec -it headscale headscale apikey create
# 查询apikey
docker exec -it headscale headscale apikey ls
二、搭建web-ui
这一步是搭建 headscale 的 web-ui 界面,这不是必要的,因为阿蛮君更多使用命令,这只是有助于更好的查看相关信息。
docker run -d \
--name headscale-webui \
--restart always \
-v /home/docker/headscale/config:/etc/headscale/:ro \
-v /home/docker/headscale/web-ui/data:/data \
-u root \
-p 5000:5000 \
-e HS_SERVER=https://headscale.amjun.com \
-e DOMAIN_NAME=https://headscale.amjun.com \
-e SCRIPT_NAME=/admin \
-e AUTH_TYPE=Basic \
-e BASIC_AUTH_USER=admin \
-e BASIC_AUTH_PASS=admin \
-e KEY="2uHP6BSVocX+wcWU5mzuXA7JvnZA70UaTadB8L1heOo=" \
--restart always \
ifargle/headscale-webui:latest
其中 /home/docker/headscale/config 为上面服务端的映射目录,这两个目录需要一致。HS_SERVER 和 DOMAIN_NAME 填写自己的域名1。KEY 是用来加密待会需要保存的 apikey 的字符串,使用命令 openssl rand -base64 32 生成。
接下来需要创建 headscale 服务器的 api-key,这里设置一个比较久的过期时间。
三、配置nginx和web-ui
1.配置nginx
如果前面server_url没有配置 ssl 加密,那这一步也不是必要的。
添加如下配置:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name headscale.amjun.com;
ssl_certificate /etc/nginx/conf.d/cert/amjun.com.cer;
ssl_certificate_key /etc/nginx/conf.d/cert/amjun.com.key;
location ^~/ {
proxy_pass http://localhost:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $server_name;
proxy_redirect https:// https://;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
}
location ^~/admin/ {
proxy_pass http://localhost:5000/admin/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name headscale.amjun.com;
rewrite ^(.*)$ https://$host:443$1 permanent;
}
保存配置后重启 nginx,如果配置正确,那么通过 https://域名/admin 应该可以访问到 web-ui 界面,输入容器启动时配置的用户名密码即可进入。

2.配置web-ui
上面提示输入 apikey,这个需要 headscale 服务端生成,这里设置一个比较长的时间,根据自己的需要即可。
docker exec -it headscale headscale apikeys create -e 10000d
运行命令后将生成的 key 输入,点击 save 即可,概览页面如下:

四、创建用户和授权密钥
headscale 个人理解是用户就是命名空间,进行网络隔离,所以需要先创建用户。
# 创建用户
docker exec -it headscale headscale users create hz
授权密码的作用是,客户端登陆时不需要再服务端进行确认,阿蛮君总是喜欢使用简单的方式,所以就选择这种方式了。
# reusable 参数代表可以重复使用,不加的话密钥只能用来一个客户端加入
docker exec -it headscale headscale preauthkeys create -e 10000d --reusable -u hz
# 查看密钥
docker exec -it headscale headscale preauthkeys list -u hz
这里记得记录好授权密钥,下面将会用到。
五、客户端安装
headscale 相当于是重新实现了 tailscale 的服务端,客户端基本还是用的 tailscale。
tailscale 客户端下载地址:https://tailscale.com/download/
1. windows
1.1 安装客户端
下载 windows 客户端并进行安装。
1.2 安装注册表
访问 https://headscale.amjun.com/windows,可以看见配置的教程。
提示需要修改注册表,这里可以直接 curl https://headscale.amjun.com/windows/tailscale.reg 下载文件后,双击运行文件进行安装即可。
1.3 登录
在 tailscale 的安装目录下使用 cmd 打开,输入命令:
tailscale login --login-server https://headscale.amjun.com --authkey b6a9b4f4e9c3a7c7e7b9b1a3a6b9e6b7a5e7c2a1e3a0a4a1 --accept-dns=false --accept-routes
这里的 authkey 是第四步生成的,然后在服务器使用命令查看。
docker exec -it headscale headscale nodes ls
2. linux
2.1 脚本安装
curl -fsSL https://tailscale.com/install.sh | sh && \
tailscale login --login-server https://headscale.amjun.com --authkey b6a9b4f4e9c3a7c7e7b9b1a3a6b9e6b7a5e7c2a1e3a0a4a1 --accept-dns=false --accept-routes
这里仅仅安装方式不同,登录的命令完全一样。
2.2 docker安装
docker run -d \
--name=tailscaled \
-v /home/docker/tailscale/:/var/lib \
-v /dev/net/tun:/dev/net/tun \
-e TS_STATE_DIR=/var/lib/state/ \
--network=host \
--restart always \
--privileged tailscale/tailscale:v1.44.0 \
tailscaled --tun=tailscale0 -debug=:8088 -no-logs-no-support=true
这里需要将 TS_STATE_DIR 指定的文件夹持久化,否则删除容器再新建后,在服务端能看见重复的设备。并且需要指定 --tun=tailscale0,不然似乎不能在宿主机创建网卡。
然后使用如下命令进行登录。
docker exec tailscaled tailscale login --login-server https://headscale.amjun.com --accept-dns=false --accept-routes=false --authkey b6a9b4f4e9c3a7c7e7b9b1a3a6b9e6b7a5e7c2a1e3a0a4a1 --advertise-routes=172.21.9.0/24,172.30.1.0/24,172.26.1.0/24,172.20.2.0/23
根据自己网络情况设置 --advertise-routes,我这是需要通过这台内网机器访问公司其他网络。
如果出现如下错误:
running [/sbin/ip6tables -t filter -N ts-input —wait]: exit status 3: modprobe: can’t change directory to ‘/lib/modules’: No such file or directory
ip6tables v1.8.8 (legacy): can’t initialize ip6tables table `filter’: Table does not exist (do you need to insmod?)
Perhaps ip6tables or your kernel needs to be upgraded
执行以下命令:
# 防止探测ip6table
sudo modprobe ip6table_filter
3. 安卓
3.1 安装并配置
目前官方暂不可以自定义登录链接,需要下载可以自定义登录链接的安卓客户端,阿蛮君这里提供了一份可以使用的客户端,链接放在后面。
安装后,点击右上角三个设置自定义登录地址:

点击保存并重启,再点击 sign in,将看见如下内容。

3.2 服务端注册
根据提示在服务端运行命令:
docker exec -it headscale headscale nodes register --user hz --key nodekey:xxxx
注意这里的 USERNAME 需要修改为自己刚刚创建的用户名。
Wireguard 搭建异地组网
服务器搭建wg-easy
1. 安装wireguard内核
由于使用的是 centos7 服务器,默认内核不支持 wireguard。
如果不进行安装可能出现如下日志:
Mon May 27 03:19:09 UTC 2024: Starting Wireguard /etc/wireguard/wg0.conf
[#] ip link add wg0 type wireguard
RTNETLINK answers: Not supported
Unable to access interface: Protocol not supported
[#] ip link delete dev wg0
Cannot find device “wg0”
Adding iptables NAT rule
运行如下命令安装即可:
yum update && \
yum install epel-release elrepo-release -y && \
yum install yum-plugin-elrepo -y && \
yum install kmod-wireguard wireguard-tools -y
2. 加载模块
如果不进行如下命令操作,可能后续会出现能 ping 通,但是不能够进行 ssh 或者 http 访问的情况。
sudo modprobe iptable_filter && \
sudo modprobe ip6table_filter
3. 安装wg-easy
wg-easy 是一个可以快速搭建 wireguard 服务端的项目,提供了一个方便的 ui 界面,生成客户端只需要在界面生成,然后即可下载配置文件。
当然了,之前因为没有搭建成功也是由于它的弊端,因为他的配置文件不能手动修改,所以就导致客户端配置了路由,但是服务器不知道往哪里发的问题。
所以,搭建 wg-easy 只是为了过度。
version: '3.1'
services:
wg-easy:
image: weejewel/wg-easy:nightly
container_name: wg-easy
environment:
- WG_HOST=<Server IP>
- PASSWORD=<PASSWORD>
- WG_ALLOWED_IPS=10.8.0.0/24
- WG_PERSISTENT_KEEPALIVE=25
- WG_DEFAULT_DNS=114.114.114.114
- UI_TRAFFIC_STATS=true
volumes:
- /home/docker/wireguard:/etc/wireguard
network_mode: "host"
# 51820 为 wireguard 数据传输的端口,51821 为 wg-easy 端口
# ports:
# - 51820:51820/udp
# - 51821:51821/tcp
cap_add:
- NET_ADMIN
- SYS_MODULE
privileged: true
restart: unless-stopped
这里需要注意的配置有三个:
- WG_HOST:填写服务器 IP
- PASSWORD:访问 wg-easy 的密码
WG_ALLOWED_IPS:客户端路由地址,即客户端下载配置文件都会携带该配置
安装wireguard客户端
创建客户端配置文件
访问
ip:51821,然后输入密码即可进入 wg-easy 图形界面,如下图所示。(如果需要配置反代可以自行配置)
wireguard 官方客户端下载地址:https://www.wireguard.com/install/#ubuntu-module-tools
windows安装
在网页端点击下载,然后导入配置文件即可。

移动端安装
直接扫码即可导入配置。

linux安装
在 linux 上,个人喜欢使用 docker 进行安装。当然,如果使用的依然是 centos,那么还需要像上面那样安装 wireguard 内核。
下载配置文件,将其修改为
wg0.conf,然后放在/home/docker/wireguard目录下。再运行如下命令:
docker run -d \ --privileged \ --net=host \ --restart=always \ --name wireguard-client \ --cap-add NET_ADMIN \ --cap-add SYS_MODULE \ -v /home/docker/wireguard/wg0.conf:/etc/wireguard/wg0.conf \ --restart unless-stopped \ cmulk/wireguard-docker:alpine异地组网
如果按上面的步骤,应该可以实现点对点进行通信,即连接上的客户端会像这样出现红点。

比如网络情况如下,并且需要移动端能够实现移动端直接输入服务器 A 和服务器 B 的内网 ip 即可访问服务。

要实现上述目的,要进行如下操作。
1. 保证移动端路由

这里显示的配置意思是,wireguard 会代理
10.8.0.0/24, 172.21.9.0/24, 172.30.1.0/24, 172.26.1.0/24, 172.20.2.0/23的流量,将所有匹配的流量都发往服务器。2. 修改服务器配置
例如我的内网设备为
gw这台设备,当服务器收到172.21.9.0/24, 172.30.1.0/24, 172.26.1.0/24, 172.20.2.0/23请求时,需要将其转发到gw设备上。修改对应的
AllowedIPs即可。
删除
wg-easy容器。wg-easy 的作用在这里就结束了,它的作用就是为了方便地生成客户端地配置,现在客户端基本已经配置好了,并且需要修改
wg0.conf,而它会覆盖配置,所以需要删除。docker rm -f wg-easy运行如下命令:
docker run -d \ --privileged \ --net=host \ --restart=always \ --name wireguard-client \ --cap-add NET_ADMIN \ --cap-add SYS_MODULE \ -v /home/docker/wireguard/wg0.conf:/etc/wireguard/wg0.conf \ --restart unless-stopped \ cmulk/wireguard-docker:alpine3. 修改客户端配置
如果内网设备为路由器,不需要进行该操作。
首先内网设备需要开启 ipv4 转发,运行
cat /proc/sys/net/ipv4/ip_forward如果结果为 1,表示转发已开启。否则需要修改
/etc/sysctl.conf文件,将#net.ipv4.ip_forward=1修改为net.ipv4.ip_forward=1。再执行sysctl -p。另外,
wg0.conf需要添加如下配置:PostUp = iptables -A FORWARD -i client_route -j ACCEPT; iptables -A FORWARD -o client_route -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -A FORWARD -i eth0 -j ACCEPT; iptables -A FORWARD -o eth0 -j ACCEPT; iptables -t nat -A POSTROUTING -o client_route -j MASQUERADE PostDown = iptables -D FORWARD -i client_route -j ACCEPT; iptables -D FORWARD -o client_route -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -D FORWARD -i eth0 -j ACCEPT; iptables -D FORWARD -o eth0 -j ACCEPT; iptables -t nat -D POSTROUTING -o client_route -j MASQUERADE
如果不添加上面的配置,将服务路由到其他服务器,因为没有进行源地址 nat 转换,即使数据发送到了服务器 A/B 上,数据也回不来,因为它不知道
10.8.0.0/24的路由。照上面的配置,在发送到其他服务器时,会将源地址转换成内网设备的地址。
Zerotier 搭建私有根服务器及创建虚拟局域网
一、Zerotier 原理

关于 zerotier,搜集网上资料和个人一点浅薄的理解。
概念
- planet:核心角色,官方不允许自建私有,zerotier 的行星服务器,用于管理全球所有的 zerotier 客户端的地址信息,帮助建立客户端间的直接链接,以及在无法建立直接链接时,作为中继服务器转发设备间的流量。
moon:官方允许自建私有,作为离客户端更近的中继服务器存在,可以使转发的效率更高。
原理
客户端注册
在内网机器上启动一个 zerotier 客户端,使用 join 加入一个网络,在控制台对客户端进行授权,此时 planet 上有如下记录:
10.0.0.1 - 150.0.0.1/15679 10.0.0.2 - 160.0.0.1/22226尝试 p2p 连接
当在
10.0.0.1机器上访问10.0.0.2,内网机器向 planet 查询到目标地址的公网160.0.0.1,端口为 22226。10.0.0.1尝试与160.0.0.1的 22226 端口进行直接数据交互,这个过程称为 udp 打洞实现 p2p 直连。planet 转发
由于各种网络限制,p2p 不能直连。
此时通过 planet 转发,如果还配置了 moon 节点,此时会通过速度快的 moon 节点进行转发。
如上图则大概率从上海的 moon 节点进行数据转发,此时网络取决于 moon 的带宽。
二、私有 zerotier-planet 的优势
- 解除官方的设备连接数限制
提升手机客户端连接的稳定性
三、搭建私有 planet
了解了 zerotier 的概念原理,那么大概了解搭建私有 planet 的重要性。
1、运行控制器容器
docker run -d \ --name zt-ui \ -v /home/docker/zt-ui/zerotier-one:/var/lib/zerotier-one \ -v /home/docker/zt-ui/ztncui/etc:/opt/key-networks/ztncui/etc \ -p 4000:4000 \ -p 9993:9993 \ -p 9993:9993/udp \ -e MYADDR=1.1.1.1 \ -e HTTP_PORT=4000 \ -e HTTP_ALL_INTERFACES=yes \ -e ZTNCUI_PASSWD=admin123 \ --restart=always \ hausen1012/ztncui这里需要注意的是传参需要将
1.1.1.1修改为公网 ip。2、生成 planet 文件
docker exec -it zt-ui bash /tmp/patch.sh && \ docker restart zt-ui如果 linux 内核版本太低,可能报错
FATAL: kernel too old,那么需要升级内核。关于升级内核,可以参考这篇文章 Linux 系统内核升级。
当然,如果你觉得云服务器不太方便升级内核,那么完全可以用一台测试的虚拟机进行生成文件,文件生成后用 ftp 上传到
/home/docker/zt-planet目录,然后再启动容器。3、测试
docker exec -it zt-ui zerotier-cli listmoons # 显示如下内容则表示搭建成功 [ { "id": "00000004e3b1b4b0", "roots": [ { "identity": "04e3b1b4b0
ea0c548b45efcc701c052305f06568c749a4647b9a5b111e2b372c05f7c3ed56ae1009c29cb1aa51d95057bf1b65b3a2f7b01d129437f6b72efd08f68281fb52",
"stableEndpoints": [
"1.1.1.1/9993"
]
}
],
"signature": "b4f539ef93e198203d9e270c155d091769408ff98489d83bcf6444d2a95112ca7369138b98d42512caa3c878f3eff2c27ecada28f549ea19e3a407e71bbeb008d51f6ba92af17e8b6e4c1b8eacbd4abc42f0f639746ea924cffb99b539f94e2b",
"timestamp": 1665642068786,
"updatesMustBeSignedBy": "7fcb120079801a1ddde8c1fb6657365351bca7279e8470728f4cf01fb5efc81b57cde03338b4ea76dfd39570f74f2654d8d52a22613e77ed2e4cbb46a648a42d",
"waiting": false
}
]
1.1.1.1为公网 ip 则搭建 planet 成功。四、创建私有网络
访问
http://公网ip:4000,账号密码:admin/admin123。1、创建网络

2、初始化网络
点击 Easy setup

设置网段和子网掩码

五、安装 zerotier 客户端
docker 安装
既然已经搭建了私有的 planet,当然是使用自己的,需要先下载服务器 /home/docker/zt-planet/zerotier-one 目录下的 planet 文件。
1、启动 zerotier 客户端
docker run -d \
--name=zt-cli \
--device=/dev/net/tun \
--net=host \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN -d \
-v /home/docker/zt-client/zerotier-one:/var/lib/zerotier-one \
--restart unless-stopped \
hausen1012/zerotier
2、替换 planet 文件
将服务器下载的 planet 文件上传到客户端的 /home/docker/zt-client/zerotier-one 目录。
3、重启客户端
docker restart zt-cli
4、查看 planet
docker exec -it zt-cli zerotier-cli listpeers

可以看见 stableEndpoints 的配置是自己的公网 ip。
5、加入网络
docker exec -it zt-cli zerotier-cli join 8b8b9ed58a10bd45
6、授权

ip 也可以自己设置,不过要在刚刚设置的网段内。

windows 安装
1、下载客户端
2、安装客户端
双击安装即可
3、替换 planet
将下载好的 planet 文件复制到 C:\ProgramData\ZeroTier\One 目录下
4、重启服务
如果仅仅只是重启 ui 是不行的,需要找到任务管理器 -> 服务 -> ZeroTierOneService,进行重启。

5、查看 planet

可以看见 planet 地址是自己的公网。
6、加入网络
点击右下角图标,join new network,输入刚刚创建的虚拟网络 id,我这边是 8b8b9ed58a0baa3d。
7、授权
和 dokcer 安装一样的操作,不再赘述。
六、测试
通过上述方式将两台机器加入到网络,通过 ping 查看是否能打洞成功。其中 202 本地虚拟机,vps 是有公网 ip 的云服务器。

ping 检测
在 10.0.0.202 机器上 ping 10.0.0.222。

listpeers 查看到只有自己的私有根服务器,ping 的延迟不到 100ms 和直接 ping 公网 ip 差不多,说明打洞成功。
局域网 scp 检测

可以看见速度能达到十几MB,而我的根服务器是腾讯云的 8Mbps 服务器,如果通过根服务器转发肯定不可能达到这个速度,说明打洞成功。
speedtest 测速

FRP
FRPS(服务端搭建)
第一步:
docker安装(默认最新版)
curl -fsSL https://get.docker.com | bash -s docker
第二步:
安装 docker-compose
curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
第三步:给与权限
chmod +x /usr/local/bin/docker-compose
第四步:
在VPS 输入命令创建目录 mkdir -p /root/data/docker_data/frps
进入目录 cd /root/data/docker_data/frps 输入命令touch docker-compose.yml 创建配置文件。复制下面代码到配置文件里。
services:
frps:
restart: always
network_mode: host
volumes:
- '/root/data/docker_data/frps/frps.toml:/etc/frp/frps.toml'
container_name: frps
image: snowdreamtech/frps:0.56.0
第五步:
输入命令 touch frps.toml 创建配置文件。复制下面代码到配置文件里。
# frps.toml
bindPort = 1341 # 服务端与客户端通信端口
transport.tls.force = true # 服务端将只接受 TLS链接
auth.token = "dg233eg443u" # 身份验证令牌,frpc要与frps一致
# Server Dashboard,可以查看frp服务状态以及统计信息
webServer.addr = "0.0.0.0" # 后台管理地址 这里不需要改动
webServer.port = 13442 # 后台管理端口
webServer.user = "admin" # 后台登录用户名
webServer.password = "admin" # 后台登录密码
最后 docker-compose up -d 安装即可
到这里我们的服务端FRPS搭建完成
FRPC搭建(客户端搭建)
1.2.3步骤按照上面操作即可
第四步:
在VPS 输入命令创建目录 mkdir -p /root/data/docker_data/frpc
进入目录 cd /root/data/docker_data/frpc 输入命令touch docker-compose.yml 创建配置文件。复制下面代码到配置文件里。
version: '3.3'
services:
frpc:
restart: always
network_mode: host
volumes:
- '/root/data/docker_data/frpc/frpc.toml:/etc/frp/frpc.toml'
container_name: frpc
image: snowdreamtech/frpc:0.56.0
第五步:
输入命令 touch frpc.toml 创建配置文件。复制下面代码到配置文件里。
# frpc.toml
transport.tls.enable = true # 从 v0.50.0版本开始, transport.tls.enable的默认值为 true
serverAddr = "111.111.111.111" #链接的公网IP 替换成你自己的IP
serverPort = 1341 # 公网服务端通信端口 需要和服务器的保持一致
auth.token = "dg233eg443u" # 令牌,与公网服务端保持一致
[[proxies]]
name = "test-http" #需要多个穿透这里修改名字
type = "tcp" #穿透的协议 具体有哪些 参考官网 https://gofrp.org/zh-cn/docs/examples/
localIP = "192.168.31.21" # 本地IP修改为你自己的
localPort = 3444 # 搭建服务的本地端口
remotePort = 1343 #外网访问端口
最后 docker-compose up -d 安装即可
到这里就大功告成拉 最后就是 IP:端口 访问拉
WIN FRPC搭建(客户端搭建)
第一步:
去下面的网址下载对应的win版本 如果不清楚是什么架构, 可以选择 frp_0.56.0_windows_amd64.zip
试一下。 不能用再换另外一个。
https://github.com/fatedier/frp/releases/tag/v0.56.0
第二步:
复制下面代码到配置文件里(frpc.toml)
# frpc.toml
transport.tls.enable = true # 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "111.111.111.111" #链接的公网IP 替换成你自己的IP
serverPort = 1341 # 公网服务端通信端口 需要和服务器的保持一致
auth.token = "dg233eg443u" # 令牌,与公网服务端保持一致
[[proxies]]
name = "test-http" #需要多个穿透这里修改名字
type = "tcp" #穿透的协议 具体有哪些 参考官网 https://gofrp.org/zh-cn/docs/examples/
localIP = "192.168.31.21" # 本地IP修改为你自己的
localPort = 3444 # 搭建服务的本地端口
remotePort = 1343 #外网访问端口
第三步:
frpc文件夹内 新建一个文本文档 改名为 双击运行.bat 复制 cmd /k “frpc.exe -c frpc.toml” 保存 最后在双击运行即可启动!
到这里就大功告成拉 最后就是 IP:端口 访问拉
进阶篇(启用HTTPS协议)
FRPS(服务端搭建)复制下面代码到配置文件里(frps.toml)
# frps.toml
bindPort = 1341 # 服务端与客户端通信端口
vhostHTTPSPort = 443
transport.tls.force = true # 服务端将只接受 TLS链接
auth.token = "dg233eg443u" # 身份验证令牌,frpc要与frps一致
# Server Dashboard,可以查看frp服务状态以及统计信息
webServer.addr = "0.0.0.0" # 后台管理地址 这里不需要改动
webServer.port = 13442 # 后台管理端口
webServer.user = "admin" # 后台登录用户名
webServer.password = "admin" # 后台登录密码
WIN FRPC搭建(客户端搭建)复制下面代码到配置文件里(frpc.toml)
证书文件放在 同一个目录。 下面这个配置文件是在win下运行的。 docker不能用???测试过有问题后来改为 win下运行了。如果有知道原因的小伙伴还请分享一下,我好完善教程。
serverAddr = "111.111.111.111" #链接的公网IP 替换成你自己的IP
serverPort = 1341 # 公网服务端通信端口 需要和服务器的保持一致
auth.token = "dg233eg443u" # 令牌,与公网服务端保持一致
[[proxies]]
name = "test_htts2http" # 不用修改
type = "https" # 不用修改
customDomains = ["qq.qq.com"] # 替换成你自己的域名
[proxies.plugin]
type = "https2http" # 不用修改
localAddr = "192.168.11.11:5555" # 本地IP和端口 修改为你自己的
crtPath = "./qq.qq.com.cer" # 证书路径 qq.qq.com.cer 替换成你自己的
keyPath = "./qq.qq.com.key" # 秘钥路径 qq.qq.com.key 替换成你自己的
hostHeaderRewrite = "127.0.0.1" # 不用修改
requestHeaders.set.x-from-where = "frp" # 不用修改
