私の問題は次のようによく似ています。宛先ポートに応じてさまざまなインターフェイスにトラフィックを出力。しかし、この問題は2011年に提起されました。これで最新のカーネルがあるので、tcpまたはudpセレクタを使用してIPルールを作成できます(「ポリシールーティングはレイヤ4にあります」):ソース -この回答に対するコメントを見る。
私はルーティングに初めて触れたので、unix.stackexchange.comの答えで読んだものだけを知っています。私の解決策のアイデアのほとんどは次のようになりました。特定のインターフェイスを介したポートトラフィックのルーティング。
eth1(10.0.0.182)とeth0(192.168.1.2)の2つのインターフェースがあります。私のデフォルトパスはeth0です。すべてのhttpトラフィックとhttpsトラフィックがデフォルトルートではなくeth1を介してルーティングされるようにしたいです。他のすべては同じままです。
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
0.0.0.0 10.0.0.1 0.0.0.0 UG 203 0 0 eth1
10.0.0.0 0.0.0.0 255.255.255.0 U 203 0 0 eth1
192.168.1.2 0.0.0.0 255.255.255.0 U 202 0 0 eth0
10.0.0.1のデバイスは、DHCPサーバー、ファイアウォールなどの役割を果たすComcastモデムです。パブリックIPアドレスはComcast IPです。
最新のIPルール機能を使用して正常に機能するには、次の手順を実行する必要があります。
# add a new (secondary) table:
echo "200 comcast-route" >> /etc/iproute2/rt_tables
# Populate secondary routing table
ip route add default via 10.0.0.1 dev eth1 table comcast-route
# relax Strict Reverse Path Forwarding to Loose RPF
sysctl -w net.ipv4.conf.eth1.rp_filter=2
#NOTE: my system already has this value, so no change is needed
# net.ipv4.conf.eth1.rp_filter = 2
# specify alternate routes when using specific destination ports
# iif lo below means "from local"
ip rule add iif lo ipproto tcp dport 80 lookup 80
ip rule add iif lo ipproto tcp dport 443 lookup 80
これはすべて正しいと思いますか?うまくいかないと、これらの変更をどのように元に戻すことができますか?
最後に、すべてが期待どおりに機能する場合、どのようにこれを持続させることができますか?答えが見えますここが、使われたアドバイスは /etc/rc.d/rc.local
昔ながらだと思います。これらの規則に従うより良い方法はありますか?