自用虚拟局域网解决方案
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客户端即可进行使用了。
