我只想让一个程序通过我存储在的wireguard 配置运行/etc/wireguard/config.conf
,而所有其他程序通过正常的IP 地址运行。
我发现了Wireguard 中的此页面用于路由,这建议使用命名空间,但是当我尝试运行某些命令时,例如
sudo ip link set wlp2s0 netns physical
RTNETLINK answers: Invalid argument
建议这不能通过 arch linux 来完成。有没有人找到一种方法让特定程序通过wireguard运行?
我在另一台机器上尝试了上述教程,在尝试加载我的wireguard配置时出现以下错误。
wg setconf wgvpn0 /etc/wireguard/my_vpn.conf
:格式无效,但使用时相同的配置可以完美运行wg-quick up
顺便说一句,有人知道 Wireguard 的问题跟踪系统吗?我提交到他们的邮件列表的问题不公开。
答案1
来自OP的问题中提供了wireguard.com的链接,特别是在新的命名空间解决方案,它解释了如何移动物理接口,以以太网和无线为例,大胆强调我的:
# ip netns add physical
现在我们进入
eth0
“wlan0
物理”命名空间:# ip link set eth0 netns physical # iw phy phy0 set netns name physical
(请注意,必须使用
iw
并通过指定物理设备来移动无线设备phy0
。)
如前所述,OP 似乎读取了第一个ip link set ... netns
命令,但没有看到无线设备需要第二个命令。
iw
的手册页稀缺,但iw --help
包括:
phy <phyname> set netns { <pid> | name <nsname> } Put this wireless device into a different network namespace: <pid> - change network namespace by process id <nsname> - change network namespace by name from /run/netns or by absolute path (man ip-netns)
某些驱动程序可能尚不与网络命名空间兼容。其工作需要此输出:
$ sudo iw phy0 info|grep netns
* set_wiphy_netns
假设只有一个简单的无线设备,通过其对应设备wlp2s0
进行处理,因此根本不会出现在命令中。必须使用这个:iw
phy0
sudo iw phy phy0 set netns name physical
答案2
获取程序/运行程序的用户的UID;
使用将其发送到wireguard隧道中
iptables
。
[编辑] 例如,这里我将 exemple_app (将其替换为您想要的程序)流量重定向到 tor (它来自我的项目之一)。只需更改一些内容并将流量重定向到您的wireguard 隧道(互联网上有很多示例)。
#!/bin/sh
# Vars
_trans_port="9040"
_dns_port="5353"
_exemple_app_uid=`id -u exemple_app`
#_tor_uid=`id -u debian-tor`
#_resv_iana="0.0.0.0/8 100.64.0.0/10 169.254.0.0/16 192.0.0.0/24 192.0.2.0/24 192.88.99.0/24 198.18.0.0/15 198.51.100.0/24 203.0.113.0/24 224.0.0.0/4 240.0.0.0/4 255.255.255.255/32"
#_non_tor="127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16"
_out_if="wlan0"
_gateway="192.168.1.1"
_local_network="192.168.1.0/24"
# Remove all the iptables rules
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Set up the policies
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP
# Redirect trafic through Tor
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $_exemple_app_uid -m tcp -j REDIRECT --to-ports $_trans_port
# redirect DNS requests through Tor
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner $_exemple_app_uid -m udp --dport 53 -j REDIRECT --to-ports $_dns_port
# Drop the rest
iptables -A OUTPUT -p tcp -m owner --uid-owner $_exemple_app_uid -j LOG --log-prefix "[exemple_app tcp drop] " --log-level 7 --log-uid
iptables -A OUTPUT -m owner --uid-owner $_exemple_app_uid -j DROP
创建一个在启动时执行脚本的 systemd 服务。