Ubuntu

使用非預設路由作為非特權使用者

  • July 14, 2018

在 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_*人應該做這項工作。

引用自:https://serverfault.com/questions/920857