WireGuard隧道搭建

前言

先说需求吧,是想在公司远控家里的笔记本。之前一直在用的方案是通过frp将自己电脑的3389端口映射到公网的服务器,但是这样所有人都能访问我的3389端口,即使设置的是强密码也始终觉得有安全隐患。除此之外还有某些软件的基于web的控制面板,大部分时候只需要在启动的时候改一次配置就行,其余时间放在公网没有任何用处,完全就是给攻击者扫描的。所以以前在用这台服务器的时候经常是先开着端口把容器跑起来,改完配置再关掉端口用docker compose up -d重新创建容器,这样非常不优雅,但是安全。

最近了解到了WireGuard这样一个工具可以组内网,也就是说只需要开一个UDP的51820端口建立隧道,其他的端口都不需要再放在公网了,这样暴露在公网的攻击面就少了很多。而且在WireGuard隧道搭建完之后已经是内网环境了,某些工具的控制端口可以打开了、3389不会被扫了、445端口也能访问了,在外面访问家里的smba服务了。

基于docker搭建WireGuard隧道

那我怎么搭这个隧道呢,使用docker的话其实只需要一条命令,在linuxserver/wireguard这个镜像里有:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
docker run -d \
  --name=wireguard \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Etc/UTC \
  -e SERVERURL=wireguard.domain.com `#optional` \
  -e SERVERPORT=51820 `#optional` \
  -e PEERS=1 `#optional` \
  -e PEERDNS=auto `#optional` \
  -e INTERNAL_SUBNET=10.13.13.0 `#optional` \
  -e ALLOWEDIPS=0.0.0.0/0 `#optional` \
  -e PERSISTENTKEEPALIVE_PEERS= `#optional` \
  -e LOG_CONFS=true `#optional` \
  -p 51820:51820/udp \
  -v /path/to/appdata/config:/config \
  -v /lib/modules:/lib/modules `#optional` \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --restart unless-stopped \
  lscr.io/linuxserver/wireguard:legacy

跑起来这条命令就行了,改成docker-compse.yml就是这样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: "3.8"
services:
  wireguard:
    environment:
      - PUID=1001
      - PGID=1001
      - TZ=Asia/Shanghai
      - PEERS=5 #optional
      - PEERDNS=auto #optional
      - LOG_CONFS=true #optional
      - SERVERURL=wireguard.domain.com #optional
      - INTERNAL_SUBNET=10.0.1.0 #optional 
      - ALLOWEDIPS=10.0.1.0/24 #optional
    image: linuxserver/wireguard
    container_name: wireguard
    volumes:
      - ./config:/config
      - ./modules:/lib/modules
    ports:
      - "51820:51820/udp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1

这个配置我选重点的来讲:

  • PEERS=5就是有5台设备可以连连接
  • SERVERURLWireGuard服务端的地址
  • INTERNAL_SUBNET分配给客户端的IP地址段
  • ALLOWEDIPS是指哪些地址会被转发,改成10.0.1.0/24就是说只转发目的地址为这个网段的地址

运行之后会在config/peerX文件夹生成客户端用的配置文件,直接导入客户端就行。在手机上用也可以打开config/peerX/peerX.png这种图片通过二维码导入。客户端还有一条PersistentKeepalive配置,在配置文件中加入PersistentKeepalive = 25之后就是每25秒发送keepalive心跳,不加入这条可能在过一段时间就和客户端失联了。

updatedupdated2023-10-142023-10-14