如何使用 iptables 通过基于 gid 的接口转发所有流量?

如何使用 iptables 通过基于 gid 的接口转发所有流量?

我在 Debian 12 bookworm

我正在尝试通过接口 tun9 转发来自(和到)组中用户的所有流量watchers,并阻止他们使用 enp2s0。

我已经使用 openvpn 建立了一个隧道,使用 protonvpn 的设置,使用免费层(一个 IP 地址 - 这就是我所需要的)。

但我遇到了问题...

我在以下位置建立了一项服务/etc/systemd/system/proton.service

[Unit]
Description=ProtonVPN for Watchers
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/protonvpn/<file-location>.ovpn
ExecStartPost=/etc/openvpn/protonvpn/routing.sh

[Install]
WantedBy=multi-user.target

/etc/openvpn/protonvpn/routing.sh这是上面的服务文件中引用的内容。

#!/bin/bash

# Flush existing rules
iptables -F

NET=192.168.0.0/24
GROUP=watchers
IFACE_INTERNAL=enp2s0
IFACE_VPN=tun9
ALLOW_PORT_FROM_LOCAL=2000

iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT

iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT

iptables -A OUTPUT -m owner ! --uid-owner $GROUP -m owner --gid-owner $GROUP -j REJECT

iptables -A INPUT -i $IFACE_VPN -j ACCEPT
iptables -A INPUT -i $IFACE_INTERNAL -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -m owner /! --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT

iptables -A FORWARD

以下是.ovpn

client
dev tun9
proto tcp

remote <ip address removed> 8443
remote <ip address removed> 7770
remote <ip address removed> 

remote-random
resolv-retry infinite
nobind

cipher AES-256-GCM

setenv CLIENT_CERT 0
tun-mtu 1500
mssfix 0
persist-key
persist-tun

reneg-sec 0

remote-cert-tls server
auth-user-pass /etc/openvpn/protonvpn/creds.txt

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

and all my certs below....

我尝试了许多 iptables 规则,但似乎都不起作用。

我启动该服务并且它似乎运行正常。

当我运行 时curl --interface tun9 icanhazip.com,我获得了 VPN 的正确 IP 地址。此外,当我运行 时,sudo -u watchers curl icanhazip.com我还会获得 VPN 的正确 IP。

但是,当我curl icanhazip.com从不在观察者组(任何其他用户)中的用户运行时,我也会获得 VPN IP。

我能够获取非 VPN IP 的唯一方法是在 curl () 中强制执行curl --interface enp2s0 icanhazip.com

任何帮助,将不胜感激。

相关内容