此镜像为wireguard-tools容器,需要宿主拥有wg内核,内置frps/c作为内网转发。
173
背景
此镜像为wireguard-tools容器,需要宿主拥有wg内核,同时内置frps/fprc作为内网转发,实现点对网组网传输。架构为amd64/x86,frpc的tag对应此tag。
工具应用场景:
wireguard通常情况下,只能实现点对点,例如(服务端隧道IP段=10.1.1.0/24,隧道IP=10.1.1.1,局域网私网IP=192.168.1.2),(客户端连接到服务端使用隧道IP=10.1.1.2,客户端私网IP为192.168.2.2[注意不同网段])
此时,服务端可以通过客户端的隧道IP=10.1.1.2连接到客户端,客户段也可以通过IP=10.1.1.1连接服务端,称为点对点,但服务端无法通过客户端的局域网私网IP=192.168.2.2连接到客户端的局域网,所以本工具就是利用FRPS+FRPC作为转发,让服务端可以连接到客户端的局域网私网IP=192.168.2.2,同时,服务端任何WG设备,都可以连接到该客户端的192.168.2.2。
其实,服务端连接客户端的局域网私网行不通是因为客户端那边没有nat转发,没有接口通过到服务端到客户端的私网,但是,客户端却可以直接连接到服务端的局域网私网IP=192.168.1.2,或者使用隧道IP=10.1.1.1连接到服务端,但是反向不行,所以此工具就是为了解决这个问题,当然,此工具仅仅通过客户端端口转发的形式解决,也就是端口映射,仍然需要使用客户端的隧道IP=10.1.1.2映射端口,也就是例如客户端的FRPC配置文件有一个客户端的局域网私网IP=192.168.2.3,并且映射端口为80到frpc的81,那么便可以通过隧道IP=10.1.1.2:81访问到客户端的局域网私网服务。
该解决办法比较绕,同时并不是最优解,比如其实可以套socks5来达到直接访问局域网IP,但是如果套socks5的话,需要额外安装一些代理软件去连接,先连接到wg,在通过代理软件连接到wg建立的客户端隧道那边的socks5建立连接,需要多出一个socks5的服务端+客户端,故没有选择该方案,后面可以会搭配出一个此类型方案。
1,配置网络:
查看网卡获取接口名称:
ip addr
开启网卡混杂模式:
sudo ifconfig [接口名称] promisc && sudo ip link set [接口名称] promisc on
建立macvlan网络,以下网段要跟局域网段一样,最后的myvlan是建立后的名称,但是后期创建容器的时候要对应上:
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=[接口名称] myvlan
2,创建目录并切换到该目录下:
mkid /opt/wg-frpsc/wg-conf && mkid -p /opt/wg-frpsc/frp-conf && cd /opt/wg-frpsc/
3,创建docker-compose.yml文件,以便启动docker容器:
vi /opt/wg-frpsc/docker-compose.yml
输入:
version: '3.8' # 确保使用支持您所需功能的最高版本
services:
frp-wg:
image: gitdebiand/wireguard-tools_frps_amd64x86:0.61.0.1
container_name: wg-frpsc
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
privileged: true # 添加特权模式
networks:
myvlan: # 需要填写上面创建的macvlan自定义的网络的名称。
ipv4_address: 192.168.1.2 # 对应上之前创建的网络,作为容器IP,不可与局域网下的其他IP重复或冲突。
volumes:
- /opt/wg-frpsc/wg-conf/:/opt/wg-conf/ # 对应上之前创建的目录,作为映射。
- /opt/wg-frpsc/frp-conf/:/opt/frp/config/ # 对应上之前创建的目录,作为映射。
networks:
myvlan: # 需要填写上面创建的macvlan自定义的网络的名称。
external: true
name: myvlan # 这实际上是可选的,因为 Docker Compose 会从服务配置中推断出网络名称,可以不使用这个,如果使用,需要填写上面创建的macvlan自定义的网络的名称
4,编辑wg-conf客户端配置文件:
vi /opt/wg-frpsc/wg-conf/wg0.conf
输入:
[Interface]
PrivateKey = <客户端私钥>
Address = 10.1.1.2/24 <客户端本机隧道IP>
ListenPort = 1234 <WG的UDP通讯端口,跟下面的服务端端口对应即可。>
[Peer]
PublicKey = <服务器公钥>
PresharedKey = <预共享密钥>
AllowedIPs = 0.0.0.0/0 <0.0.0.0,表示该客户端所有数据都发往服务端,该设置可能导致无法打开自己的局域网ip,但是如果你特殊需求,只需要访问对方的IP,那么直接这样设置是可以的。一般指定需要发过去的ip即可,例如指定两个,一个隧道IP段/一个对方局域网私网段例如=10.1.1.0/24,192.168.1.0/24>
PersistentKeepalive = 5 <服务器握手时间,为秒,一般为填写取5-15左右的数值。>
Endpoint = www.xxx.com:1234 <服务器IP地址或ddns域名>:<服务器监听端口>
5,编辑frps-frpc配置文件:
编辑frps配置文件:
vi /opt/wg-frpsc/frp-conf/wg-frps.toml
输入:
#通讯端口-跟客户端对应。
bindPort = 12345
#与frp通讯用什么方式,跟客户端对应。
auth.method = "token"
auth.token = "此处可以自定义token,跟客户端对应上即可。"
#面板端口,user,password。如果不需要web面版,可以是使用该配置,直接忽略即可。
webServer.addr = "0.0.0.0"
webServer.port = 12346
webServer.user = "admin"
webServer.password = "password"
编辑frpc配置文件:
vi /opt/wg-frpsc/frp-conf/wg-frpc.toml
输入:
# frp客户端配置
serverAddr = "127.0.0.1" #本机监听IP,一般为0.0.0.0 或 127.0.0.1 或局域网IP等,自行测试本机需要的环境。
# frp服务端监听的端口,跟服务端配置文件要对应上,默认为7000,可以自定义,不被其他服务占用即可。
serverPort = 12345
# 认证token,与服务器配置文件中的token相同
auth.method = "token"
auth.token = "跟服务端的配置文件对应上"
#以下为示例配置1:
#[[proxies]]
#name = "win11" #设备名,可自定义,经测试每一个服务不可重复。
#type = "tcp" #采用得通讯协议。
#localIP = "192.168.1.66" #转发目标设备ip。
#localPort = 3389 #转发目标设备端口。
#remotePort = 3390 #映射的端口号,每个服务不能重复,即为 3390 映射到 3389,3390 == 3389 。
#以下为示例配置2:
#[[proxies]]
#name = "ssh" #设备名,可自定义,经测试每一个服务不可重复。
#type = "tcp" #采用得通讯协议。
#localIP = "192.168.1.16" #转发目标设备ip。
#localPort = 22 #转发目标设备端口。
#remotePort = 22 #映射的端口号,服务端口号可以跟目标端口号一样,前提是端口号不被占用,如果被占用,则需要修改。
#以下为示例配置3,并且取消注释使用:
[[proxies]]
name = "web"
type = "tcp"
localIP = "192.168.1.3"
localPort = 80
remotePort = 8080
[[proxies]]
name = "rdp"
type = "tcp"
localIP = "192.168.1.9"
localPort = 3389
remotePort = 3389
#最后一个配置文件的意思是:将192.168.2.3:3389端口 映射到 wg服务的 10.1.1.2:3389端口,最后一个remotePort = 3389 是给wg隧道IP:端口使用的。
配置完成后,3389是远程桌面端口,使用其他wg客户端连接到本服务的wg隧道IP例如:10.1.1.2:3389,即可连接到局域网私网的192.168.2.3:3389达到远程局域网设备的目的。
6,启动docker-compose容器:
cd /opt/wg-frpsc
sudo docker-compose up -d
大概等待10秒左右即可使用,每次更改配置文件需要重新启动一次:
sudo docker stop wg-frpsc && sudo docker start wg-frpsc
PS:wireguard服务端搭建在拥有公网ip的机器上并启用ddns或者公网IP给以上的wg客户端连接进行中转即可,可以直接使用linux系统原生,也可以选择诸如像github上:wg-easy等优秀开源项目作为服务端,按需择优。
本仓库项目致力于学习网络技术,打通两个异地办公需求为目标,用于学习跟方便办公使用,如使用本项目变相/变种/修改等方式后使用与违法行为,概不负责,后果自负,请遵守当地法律法规!
Content type
Image
Digest
sha256:d1b5f2149…
Size
31.3 MB
Last updated
almost 2 years ago
docker pull gitdebiand/wireguard-tools_frps_amd64x86:0.61.0.1