自用虚拟局域网解决方案

WireGuard + dnsmasq 搭建自用虚拟局域网

这里我就不在废话,直接说明搭建步骤。

首先需要准备服务器若干,至少一个拥有公网端口的IP,独立IP或NAT均可(后续会将这个服务器叫做主服务器,其他的服务器均为从服务器)。

在主服务器上搭建Docker环境(直接裸机装也是可以的,就是麻烦些),具体安装步骤参考Ubuntu 安装 Docker

之后准备配置文件,我们指定一个工作路径/home/xxx/wireguard

#/home/xxx/wireguard/docker-compose.yml
version: '3'
services:
  wg-easy:
    image: weejewel/wg-easy
    restart: unless-stopped
    ports:
      - "8080:80" #为了开放控制面板而设立的
      - "51820:51820/udp" #为了能够连接到VPN而开放的
    environment:
      PORT: 80
      WG_HOST: 公网IP
      WG_PORT: 51820
      WG_MTU: 1420
      WG_PERSISTENT_KEEPALIVE: 25
      WG_DEFAULT_ADDRESS: 10.13.13.x
      WG_DEFAULT_DNS: 10.13.13.1
      WG_ALLOWED_IPS: 10.13.13.0/24
      WG_POST_UP: "iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE"
      WG_POST_DOWN: "iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE"
      PASSWORD: 管理密码
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv4.ip_forward=1
    volumes:
      - vo-wg:/etc/wireguard
  dnsmasq:
    image: andyshinn/dnsmasq
    volumes:
      - ./dnsmasq.conf:/etc/dnsmasq.conf #这里我将DNS服务的配置抽离到容器之外
      - ./dnsmasq.d/:/etc/dnsmasq.d/
    restart: unless-stopped
    network_mode: service:wg-easy
volumes:
  vo-wg:

之后都是DNS服务的配置文件,分离开来比较好管理

#/home/xxx/wireguard/dnsmasq.conf
conf-dir=/etc/dnsmasq.d #指定配置文件的加载目录

每多一个主域名,最好新建一个配置文件

#/home/xxx/wireguard/dnsmasq.d/example.com.conf
address=/vpn.example.com/10.13.13.1 #为了后续在虚拟网络中直接通过域名访问VPN管理平台
address=/me.example.com/10.13.13.2 #首次创建客户端就会是这个IP,一般来说也就是给自己用的了
#......

有关dnsmasq这个DNS服务的其他配置我就不在过多说明了,直接问GPT了,以下是GPT的回答:

Dnsmasq是一个轻量级的DNS和DHCP服务器,常用于小型网络环境或者个人使用。它的配置文件提供了一些选项,用于定制DNS和DHCP服务的行为。以下是一些常见的Dnsmasq配置选项及其说明:

server:指定上游DNS服务器的地址。可以指定多个server选项,Dnsmasq将按顺序查询这些服务器。示例:server=8.8.8.8。

address:为指定的主机名分配一个特定的IP地址,可以用于局域网中的内部域名解析。示例:address=/myhost.local/192.168.1.100。

local:定义一个本地域名,与address不同,这些域名不会传递给上游DNS服务器,而是由Dnsmasq自己解析。示例:local=/localnet/。

dhcp-range:配置DHCP地址池范围和租期。示例:dhcp-range=192.168.1.50,192.168.1.100,12h。

dhcp-host:为指定的MAC地址分配一个特定的IP地址,以及可选的主机名。示例:dhcp-host=00:11:22:33:44:55,192.168.1.200,mydevice。

dhcp-option:设置DHCP选项,如默认网关、DNS服务器等。示例:dhcp-option=3,192.168.1.1。

expand-hosts:将局域网中的单标签主机名(没有域名后缀)扩展为配置的域名,以便解析。示例:expand-hosts。

domain:指定默认域名,用于简化局域网内的主机名解析。示例:domain=mylocalnet。

log-queries:启用查询日志记录。示例:log-queries。

log-facility:指定日志记录的设备和设备级别。示例:log-facility=/var/log/dnsmasq.log。

cache-size:设置DNS缓存大小。示例:cache-size=1000。

local-ttl:指定本地解析的TTL值。示例:local-ttl=300。

interface:指定Dnsmasq监听的网络接口。示例:interface=eth0。

no-resolv:防止Dnsmasq使用/etc/resolv.conf中的上游DNS服务器。示例:no-resolv。

user:指定Dnsmasq运行的用户。示例:user=dnsmasq。

这只是Dnsmasq配置文件中可用选项的一小部分。您可以在Dnsmasq的官方文档中找到完整的配置选项列表和详细说明。请注意,配置文件通常位于/etc/dnsmasq.conf,但有时也可以通过其他位置的配置文件进行自定义。

完成这些步骤后就可以执行docker-compose up -d进行环境搭建了。之后访问咱们事先开好的临时访问端口即可看到如下画面:

登陆后即可进行新客户端的创建,下载好WireGuard客户端即可进行使用了。


自用虚拟局域网解决方案
https://blog.cikaros.top/doc/d3d27d12.html
作者
Cikaros
发布于
2023年8月16日
许可协议