这个问题可能有点傻。我使用命令行
执行一些 http 请求,我希望这些连接通过我服务器的 4 个 IP 中的一个特定 IP 进行。 这些 http 请求会发送到一个特定的 IP 范围,因此我只希望以不同的方式路由这些请求。 我的服务器中的 4 个接口是、、、。wget
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
我究竟做错了什么?
答案1
wget --bind-address=192.0.2.116 http://file
从man wget
答案2
如果不是 wget,那么还有这个漂亮的小包装LD_PRELOAD
你在跑步前用来插入任何命令。
您可以使用它来专门绑定浏览器到 VLAN 接口(根据经验)。
答案3
如果您需要更灵活的路由(而不是--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