これはおそらくばかげた質問です。
コマンドラインからwget
を使用していくつかのhttpリクエストを実行しています。これらの接続は、サーバーが持っている4つのIPのうちの1つの特定のIPを介して行われます。
これらのhttpリクエストは特定の範囲のIPに送信されるため、それらのルーティングを異なる方法にしたいだけです。
サーバーの4つのインターフェイスはeth0
、eth0:0
、eth0:1
、eth0:2
です。
私は次のコマンドで試しました:route add -net 192.164.10.0/24 dev eth0:0
しかし、ルーティングテーブルを見ると、次のように書かれています。
Destination Gateway Genmask Flags MSS Window irtt Iface
192.164.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
コマンドが言うように、インターフェースはeth0
ではなくeth0:0
に設定されています。
何が悪いのですか?
wget --bind-address=192.0.2.116 http://file
からman wget
Wgetでない場合は、 この気の利いた小さなラッパー を使用してLD_PRELOAD
anyコマンドを実行する前に挿入します。
これを使用して、たとえば、ブラウザをVLANインターフェース(経験から言えば))に具体的にバインドできます。
(--bind-addressの代わりに)より柔軟なルーティングが必要な場合は、PBR(ポリシーベースルーティング)をセットアップしてみてください。
IP1='xxx.xxx.xxx.62'
IF1='eth0'
GW1='xxx.xxx.xxx.61'
P1_NET='xxx.xxx.xxx.60/30'
IP2='yyy.yyy.yyy.10'
IF2='eth0:0'
GW2='yyy.yyy.yyy.9'
P2_NET='yyy.yyy.yyy.8/30'
IP3='zzz.zzz.zzz.239'
IF3='eth0:1'
GW3='zzz.zzz.zzz.254'
P3_NET='zzz.zzz.zzz.0/24'
/sbin/ip route add $P1_NET dev $IF1 src $IP1 table ISP1
/sbin/ip route add default via $GW1 table ISP1
/sbin/ip route add $P2_NET dev $IF2 src $IP2 table ISP2
/sbin/ip route add default via $GW2 table ISP2
/sbin/ip route add $P3_NET dev $IF3 src $IP3 table ISP3
/sbin/ip route add default via $GW3 table ISP3
/sbin/ip rule add from $IP1 table ISP1
/sbin/ip rule add from $IP2 table ISP2
/sbin/ip rule add from $IP3 table ISP3
/sbin/ip ru add fwmark 1 lookup ISP1 prio 100
/sbin/ip ru add fwmark 2 lookup ISP2 prio 200
/sbin/ip ru add fwmark 3 lookup ISP3 prio 300
/sbin/ip route add default via $GW1
/sbin/ip route flush cache
そして、次のようなものを使用します
iptables -t mangle -I OUTPUT -p tcp --dport 80 -j MARK --set-mark 1