Ubuntu
使用非預設路由作為非特權使用者
在 Ubuntu 16.04 上,IPv4 的預設路由是 eth0 以外的介面。
如果我嘗試
curl -vvv --interface eth0 v4.ifconfig.co
我明白了
* SO_BINDTODEVICE eth0 failed with errno 1: Operation not permitted; will do regular bind
但如果我
sudo
工作得很好。如何更改配置,以便在此非特權使用者下執行的服務可以將 eth0 用於 IPv4?我不認為我可以更改 sudo 配置以允許這樣做,因為我不希望該服務以 root 身份執行任何東西。我還想在目前介面上維護 IPv4 的預設路由。
請參閱每程序路由。假設使用者是 foo,eth0 的 IP 地址是 10.1.1.1,路由器是 10.1.1.254 :
iptables -t mangle -A OUTPUT -m owner --uid-owner foo -j MARK --set-mark 42 iptables -t nat -A POSTROUTING -o eth0 -m mark --mark 42 -j SNAT --to-source 10.1.1.1 ip rule add fwmark 42 table 42 ip route add default via 10.1.1.254 dev eth0 table 42
您還需要
sysctl net.ipv4.conf.eth0.rp_filter=0
.
嘗試使用
getcap/setcap
並簽出man 7 capabilities
。在你的情況下,有些NET_CAP_*
人應該做這項工作。