对于自建服务,大部分时间我们都是内网访问,我们可能更希望何时何地都能用内网ip 访问
以下假定你是动态公网:如果要远程访问内网服务时,你可能是需要逐一配置端口映射。
wg-easy 是可以让你只开放两个端口 例如下文的 51820/udp 51821/tcp 两个端口,自由访问内网
提醒: wg-easy ~~~在ipv6 环境的机器上出现过以下错误,查看是否启用了ipv6 可以通过 ifconfig 看是否有 ipv6 的分配,如果可以关闭ipv6 ,可以参考底下对centos 关闭ipv6 的介绍~~~
如果启动出现 问题,按1.2 使用modprobe工具来加载或重新加载名为ip_tables的Linux内核模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[#] ip -4 address add 10.8.0.1/24 dev wg0  
[#] ip link set mtu 1420 up dev wg0
[#] iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT;
modprobe: can't change directory to '/lib/modules': No such file or directory
modprobe: can't change directory to '/lib/modules': No such file or directory
iptables v1.8.3 (legacy): can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
[#] ip link delete dev wg0
at ChildProcess.exithandler (child_process.js:383:12)
at ChildProcess.emit (events.js:400:28)
at maybeClose (internal/child_process.js:1058:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:293:5) {
killed: false,
code: 3,
signal: null,
cmd: 'wg-quick up wg0'

1. ~~~关闭ipv6(centos)如果ifconfig 没有看到ipv6分配可以跳过~~~

  • 创建配置/etc/sysctl.d/70-ipv6.conf
  • 写入文件
    1
    2
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1`
  • 重载sysctl --load /etc/sysctl.d/70-ipv6.conf

1.2 使用modprobe工具来加载或重新加载名为ip_tables的Linux内核模块

https://github.com/wg-easy/wg-easy/issues/802
image.png

1
2
3
4
5
6
7
sudo modprobe ip_tables
sudo echo 'ip_tables' >> /etc/modules
# 如果提示:➜ ~ sudo echo 'ip_tables' >> /etc/modules
# zsh: 权限不够: /etc/modules
# 可以使用如下命令替代
echo 'ip_tables' | sudo tee -a /etc/modules > /dev/null

2. 备好docker docker compose 环境

docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker run -d \
--name=wg-easy \
-e LANG=de \
-e WG_HOST=<🚨YOUR_SERVER_IP> \
-e PASSWORD=<🚨YOUR_ADMIN_PASSWORD> \
-e PORT=51821 \
-e WG_PORT=51820 \
# 改成要拦截的内网ip 段
-e WG_ALLOWED_IPS=192.168.1.0/24
-v ~/.wg-easy:/etc/wireguard \
# 端口映射放行底下两个端口
-p 51820:51820/udp \
-p 51821:51821/tcp \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easy

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
restart: unless-stopped
environment:
- LANG=en
- WG_HOST=<🚨YOUR_SERVER_IP> # 可以是域名
- PASSWORD=<🚨YOUR_ADMIN_PASSWORD>
- WG_ALLOWED_IPS=192.168.1.0/24
volumes:
- ./.wg-easy:/etc/wireguard
ports:
- 51820:51820/udp
- 51821:51821/tcp
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv4.ip_forward=1

3.启动

docker compose up -d

4.客户端配置

访问: http://<🚨YOUR_SERVER_IP>:51821/

Password 填写 上面设置的 <🚨YOUR_ADMIN_PASSWORD>

image.png
image.png|500

安装客户端

  1. 下载:访问:https://www.wireguard.com/install/ 选择对应的客户端进行安装,这里略过安装步骤
  2. 配置:
  3. image.png|500
  4. 其他客户端这里再赘述,与 windows 客户端步骤类似

5. 测试

访问:WG_ALLOWED_IPS=192.168.1.0/24 设置的内网网段访问服务
举例:如果192.168.1.11:9000 端口 运行着 portainer ,你可以访问 http://192.168.1.11:9000

参考文章:CentOS 8中禁用IPv6