crysng
V2EX  ›  Linux

两条宽带 100M,机器是双网卡,绑了 2 个网关,如何指定程序使用哪个网络?

By crysng at 2014 年 4 月 28 日 · 8080 次点击
之前试过绑定2个网关,程序使用的时候调用curl的interface比如eth0,刚开始重启network后没问题,运行1晚以后完全就串了,比如eth0走了eth1的网关,或者eth1完全就上不了网
ps: eth1使用的路由器每10分钟会重拨一次
ps: 两条网关使用的都是同一个网段,eth0:192.168.1.1, eth1:192.168.1.2, 两条路由器之间直接插网线,去掉eth1的dhcp,,本本网卡指定网关192.168.1.1的网关就会走宽带1, 指定192.168.1.2就会走宽带2 单网卡使用完全没问题
21 条回复  •  2014-05-03 22:58:06 +08:00
lmaq
   1
lmaq  
   2014 年 4 月 28 日
路由表
crysng
   2
crysng  
OP
   2014 年 4 月 28 日
@lmaq 多谢,是下面这条命令么?
route add default gw {IP-ADDRESS} {INTERFACE-NAME}

路由表到现在还没搞懂
sandtears
   3
sandtears  
   2014 年 4 月 28 日
如果是要进来的流量,程序绑定本地 IP 的时候,直接选定绑在哪个 IP 地址上就好了。
如果是要出去的流量,只能根据目标 IP 来编写不同的路由表,非常之麻烦。
sandtears
   4
sandtears  
   2014 年 4 月 28 日
唔。。查了一下,在 Windows 下有一款名为 “Connectify Dispatch” 的收费软件可以做到按照应用程序来指定网关,不知道有没有开源实现。
crysng
   5
crysng  
OP
   2014 年 4 月 28 日
@sandtears 多谢,这么说的话其实一根网线也能达成走不通的网关吧?
sandtears
   6
sandtears  
   2014 年 4 月 28 日
@crysng 是的,完全可以,你完全可以在使用一根网线的情况下,在同一个网卡上占两个 IP
crysng
   7
crysng  
OP
   2014 年 4 月 28 日
@sandtears 多谢,那么linux也一样的道理吧?
jacy
   8
jacy  
   2014 年 4 月 28 日
wsgzao
   9
wsgzao  
   2014 年 4 月 28 日
--windows网段路由
--键入 route -p add [目标] [mask <网络掩码>] [网关] [metric <度量值>] [if <接口>]
route print
route delete
route -p add 172.16.19.0 mask 255.255.255.0 198.15.0.1
注意关闭windows防火墙

--Linux(有点不同,请注意版本对应)

--添加网段路由
# vi /etc/sysconfig/network-scripts/route-eth0
172.16.19.0/24 via 198.16.2.1
defult via 198.17.1.1
--SuSE
# vi /etc/sysconfig/network/routes
172.16.19.0 198.16.2.1 255.255.255.0 eth0
default 172.16.19.1 - -

--AIX(smitty吧,我不是高手)
wsgzao
   10
wsgzao  
   2014 年 4 月 28 日
最后补充一点,做双网卡的主要目的应该是高可用考虑,一般采用主备(Active-Backup) or 轮询(Round-Robin),所以没有必要双网卡Bond
crysng
   11
crysng  
OP
   2014 年 4 月 29 日
@jacy 谢谢 这也是另外一个解决方法
crysng
   12
crysng  
OP
   2014 年 4 月 29 日
@wsgzao 多谢,明天试试
crysng
   13
crysng  
OP
   2014 年 4 月 29 日
@wsgzao 其实我的是家庭网络,普通宽带来的
crysng
   15
crysng  
OP
   2014 年 4 月 29 日
@VYSE 多谢,,route+iptable,两个都很有挑战
mifan
   16
mifan  
   2014 年 4 月 29 日
@crysng

以前当时我用的是这个解决方案,使用LD_PRELOAD实现的, 比较简单,不过windows上没法用

http://www.ryde.net/code/bind.c.txt

-----------------------------------

当时是强制 firefox 使用 某个 ip

BIND_ADDR="xxx.xxx.xxx.xxx" LD_PRELOAD=/usr/lib/bind.so firefox
mifan
   17
mifan  
   2014 年 4 月 29 日
sorry, 好像看错了 :)
crysng
   18
crysng  
OP
   2014 年 4 月 29 日
@mifan 多谢, 其实尝试过使用php的bing address,但是不生效不知道为什么
hydrazt
   19
hydrazt  
   2014 年 4 月 30 日   ❤️ 1
ip route add 192.168.1.0/24 dev em1 src 192.168.1.11 table 100
ip route add default via 192.168.1.1 dev em1 table 100
ip rule add from 192.168.1.11 lookup 100
ip route add 192.168.1.0/24 dev em2 src 192.168.1.12 table 200
ip route add default via 192.168.1.1 dev em2 table 200
ip rule add from 192.168.1.12 lookup 200

启动时执行上面的命令,从em1进入的包从em1出去,从em2进入的包从em2出去
crysng
   20
crysng  
OP
   2014 年 5 月 1 日
@hydrazt 相当,感谢,回去试
crysng
   21
crysng  
OP
   2014 年 5 月 3 日
@hydrazt 搞定
Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
© 2026 V2EX · 33ms · 3.9.8.5