私のホームサーバーには、2つの主要なインターフェイスeth1
(標準的なインターネット接続)とtun0
(OpenVPNトンネル)があります。私はiptables
UID 1002が所有するローカルプロセスによって生成されたすべてのパケットを強制的に通過しtun0
、他のすべてのパケットを通過して終了したいと思いますeth1
。
一致したパケットを簡単にマークできます。
iptables -A OUTPUT -m owner --uid-owner 1002 -j MARK --set-mark 11
ここで、11でマークtun0
されたパケットと一致するルールをPOSTROUTINGチェーン(おそらくマングルテーブル)に入れて送信し、その後、すべてのパケットと一致するルールを送信しますeth1
。
ROUTEターゲットを見つけましたが、それはソースインターフェイスを書き換えているだけのようです(間違って読んでいない限り)。
iptablesはこれに対応していますか?代わりに、ルーティングテーブルを(ip route
または従来のroute
コマンドだけで)混乱させる必要がありますか?
編集:多分もっと情報を提供すべきだと思った。現在、他のiptablesルールはありません(将来、無関係のタスクを実行するためにいくつかのルールを作成する可能性があります)。また、の出力ip route
は次のとおりです。
default via 192.168.1.254 dev eth1 metric 203
10.32.0.49 dev tun0 proto kernel scope link src 10.32.0.50
85.17.27.71 via 192.168.1.254 dev eth1
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.73 metric 203
ルーティングテーブルには触れていません-これは現在の状態です(かなり汚れているように見えますが)。申し訳ありませんが、route
このマシンにはレガシーコマンドがインストールされていません。
そして、出力ip addr
(もちろん、eth0とeth2は無視できます-現在使用されていないNICです):
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 1c:6f:65:2a:73:3f brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:1b:21:9d:4e:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.73/24 brd 192.168.1.255 scope global eth1
inet6 fe80::21b:21ff:fe9d:4ebb/64 scope link
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:1b:21:6a:c0:4b brd ff:ff:ff:ff:ff:ff
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/none
inet 10.32.0.50 peer 10.32.0.49/32 scope global tun0
編集:なんらかの機能が得られましたが、マークされたパケットをtun0に転送していません。基本的に、テーブル(11)を追加して使用しました。
ip route add table 11 via 10.32.0.49 dev tun0
ip rule add priority 10000 fwmark 11 table 11
ちょうどのときsudo -u user1000 wget -qO- whatismyip.org
、自宅の外部IPアドレスを取得しますが、取得した場合sudo -u user1002 wget -qO- whatismyip.org
、自宅のIPアドレスも取得します(ただし、OpenVPNトンネルの反対側でIPを取得する必要があります)。
実行iptables -vL
により、パケットがマーキングルールと一致することが確認されますが、ルーティングルールに従っていないように見えます。
編集:私はこれに長い時間を費やし、それでもまだ動作しませんが、私は少し近いと思います。
iptablesルールは、mangle
テーブルのOUTPUTチェーンに含まれている必要があります。nat
ソースアドレスを設定するには、テーブルのPOSTROUTINGチェーンにMASQUERADEルールも必要だと思います。ただし、OUTPUTのマングルの後に発生する再ルーティングは正しく機能していません。
私は今これに5時間を費やしているので、休憩を取っており、おそらく今夜遅くに、または明日いつかに戻るでしょう。