解決策I:特定のライブラリをプリロードする
ソリューションII:Linuxユーザースペース
古典的なLinuxユーザー空間ip-netns:優れたソリューションですが、ルートとインターフェースが1つのユーザー空間にしか存在できないことを要求します
Firejail:Firejailは特定のネットワークを使用するようにアプリケーションを強制できますが、互換性は制限されます(例:tunインターフェースと互換性がありません)。firejailはルートを必要としませんfirejail --dns=8.8.8.8 --noprofile --net=eth0 --ip=192.168.1.1 app-command
Firejail with netns:Firejailは、アプリケーションに、個別に作成された特定のユーザースペースを強制的に使用させることができます。これにより、ルートなしでスペースに名前を付けることができます。firejail --dns=8.8.8.8 --noprofile --netns=nameOfyourNS app-command
マスカレードとブリッジを使用するFirejail:Firejailは、アプリケーションにiptablesマスカレードで特定のインターフェースを使用するように強制できます。これは素晴らしいことであり、rootを必要としませんが、これはip_forwardを必要とし、セキュリティへの影響を暗示する可能性がありますfirejail --net=br0 firefox
解決策III:Linux iptables
Iptables はこの目的に使用できますが、これにはip_forward が必要であり、正しく構成されていない場合はセキュリティへの影響があります。例1、例2、例3、例4)
ソリューション(I、II、III)の注:
ワイヤーガード
VPN(特にワイヤーガード)を使用していて、このソリューションをワイヤーガードインターフェース(ユーザースペース付きのワイヤーガード)に適用する場合、リンクされた指示に従って、wgインターフェースを含むユーザースペースを作成できます(したがって、VPNインターフェースに限定されます) )また、これはと組み合わせることができますfirejail --netns=container
、rootなしでユーザー空間を使用できるようにすることもできます。
インターフェイスゲートウェイを見つける方法
ここにゲートウェイを見つけるための多くの解決策があります。使用されたゲートウェイを見つけることを許可するいくつかのコマンドがあります
$ route
$ route -n
$ ip rule list
$ ip route show
$ netstat -rn
$ cat /etc/network/interfaces
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
$ traceroute www.google.com
$ ip route show 0.0.0.0/0 dev eth0
App-Route-Jailの使用方法
git clone https://github.com/Intika-Linux-Network/App-Route-Jail.git
cd Approute-Utils
chown 755 make.sh
./make.sh
- この例の将来のマークされたパケット(jailedアプリケーション用)の
192.168.1.1
ルートを強制ゲートウェイとして使用します。このルートルールは他のアプリケーションに影響を与えません。この操作は、たとえばシステムブート時に1回だけ行う必要があります。このソリューションを毎日使用する
ip rule add fwmark 10 table 100
ip route add default via 192.168.1.1 table 100
MARK=10 LD_PRELOAD=./mark.so firefox
MARK=10 LD_PRELOAD=./mark.so wget -qO- ifconfig.me