Sign inSign up

gitdebiand/wireguard-tools_frps_amd64x86

By gitdebiand

•Updated almost 2 years ago

此镜像为wireguard-tools容器,需要宿主拥有wg内核,内置frps/c作为内网转发。

Image
Networking
0

173

gitdebiand/wireguard-tools_frps_amd64x86 repository overview

背景

此镜像为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等优秀开源项目作为服务端,按需择优。

本仓库项目致力于学习网络技术,打通两个异地办公需求为目标,用于学习跟方便办公使用,如使用本项目变相/变种/修改等方式后使用与违法行为,概不负责,后果自负,请遵守当地法律法规!

Tag summary

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