我正在尝试限制对 Openstack 中运行的专用网络的 VPN 访问。wireguard 服务器位于专用网络内部,流量从 Openstack 路由到其专用 IP 地址。专用网络内部有一个所有客户端都需要访问的 Dns 服务器,并且每个客户端都有一个特定的服务器。客户端应该只到达其特定的服务器和 DNS 服务器。管理员还应通过wireguard 访问专用网络,不受限制地使用不同的wireguard 接口。
网络
Wireguard 服务器(Ubuntu 22.04):
net.ipv4.ip_forward=1
设置在/etc/sysctl.conf
- ens3:10.10.10.107
- wg_admin:10.42.43.1/端口 51821
- wg_clients:10.42.42.1 /端口51820
专用网络内的服务器:
- DNS服务器:10.10.10.203
- 客户端1服务器:10.10.10.133
- 客户端2服务器:10.10.10.209
连接客户端/管理员:
- 客户端1:10.42.42.3
- 客户端2:10.42.42.2
- 管理员1:10.42.43.2
Wireguard 服务器配置
我使用两个区域: public:处理传入流量
$ firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: dhcpv6-client ssh ssh-custom
ports: 51821/udp 51820/udp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
wireguard:处理wireguard流量;限制哪些流量转发
$ firewall-cmd --zone=wireguard --list-all
wireguard (active)
target: default
icmp-block-inversion: no
interfaces: wg_admin wg_clients
sources:
services:
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="10.42.42.2" destination address="10.10.10.209" masquerade
rule family="ipv4" source address="10.42.42.2" destination address="10.10.10.203" masquerade
rule family="ipv4" source address="10.42.42.3" destination address="10.10.10.203" masquerade
rule family="ipv4" source address="10.42.43.0/24" masquerade log prefix="wg_admin_masq" level="warning"
rule family="ipv4" source address="10.42.42.3" destination address="10.10.10.133" masquerade
问题
使用当前的firewalld设置,我假设进入wiregurad接口的数据包在wireguard区域中处理。当丰富的规则匹配时,源 ip 应更改为wireguard 服务器 ip 10.10.10.107
,然后简单地路由到客户端。但不幸的是,这不是这样工作的。
当检查内核消息时,我看到:
[Thu Jun 8 13:32:18 2023] "filter_FWD_wireguard_REJECT: "IN=wg_admin OUT=ens3 MAC= SRC=10.42.43.2 DST=10.10.10.203 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=31157 DF PROTO=TCP SPT=44920 DPT=53 WINDOW=64860 RES=0x00 SYN URGP=0
[Thu Jun 8 13:32:20 2023] "filter_FWD_wireguard_REJECT: "IN=wg_clients OUT=ens3 MAC= SRC=10.42.42.2 DST=10.10.10.203 LEN=82 TOS=0x00 PREC=0x00 TTL=63 ID=9462 PROTO=UDP SPT=36905 DPT=53 LEN=62
[Thu Jun 8 13:32:23 2023] "filter_FWD_wireguard_REJECT: "IN=wg_admin OUT=ens3 MAC= SRC=10.42.43.2 DST=10.10.10.203 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=50271 DF PROTO=TCP SPT=55930 DPT=53 WINDOW=64860 RES=0x00 SYN URGP=0
[Thu Jun 8 13:32:41 2023] "filter_FWD_wireguard_REJECT: "IN=wg_clients OUT=ens3 MAC= SRC=10.42.42.2 DST=10.10.10.203 LEN=92 TOS=0x00 PREC=0x00 TTL=63 ID=2910 PROTO=UDP SPT=45837 DPT=53 LEN=72
[Thu Jun 8 13:32:41 2023] "filter_FWD_wireguard_REJECT: "IN=wg_clients OUT=ens3 MAC= SRC=10.42.42.2 DST=10.10.10.203 LEN=92 TOS=0x00 PREC=0x00 TTL=63 ID=58612 PROTO=UDP SPT=53142 DPT=53 LEN=72
我的自定义日志前缀未显示,因此我假设我的丰富规则被忽略。当我尝试 ping dns 服务器时:
$ ping 10.10.10.203
PING 10.10.10.203 (10.10.10.203) 56(84) bytes of data.
From 10.42.43.1 icmp_seq=1 Packet filtered
当我尝试 ping Wireguard 服务器时:
$ ping 10.10.10.107
PING 10.10.10.107 (10.10.10.107) 56(84) bytes of data.
64 bytes from 10.10.10.107: icmp_seq=1 ttl=64 time=26.7 ms
$ ping 10.42.42.1
PING 10.42.42.1 (10.42.42.1) 56(84) bytes of data.
64 bytes from 10.42.42.1: icmp_seq=1 ttl=64 time=28.5 ms
我究竟做错了什么?