如何设置呢?哪个命令可以区分开 eth0 和 eth1 ?
用容器比较容易实现
下面是通过绑定本地 ip 实现线路切换,不过也可以设置为通过用户 id 之类的分配线路。那种需要用 iptables 打标签来做。
计划使用的策略师程序绑定不同的本地地址就走不同的路由表走。
[email&echo 300 tel >>/etc/iproute2/rt_tables
[email&echo 400 cmcc >>/etc/iproute2/rt_tables
[email&ip route add default via 192.168.101.1 table cmcc
[email&ip route add default via 192.168.87.1 table tel
[email&ip rule add from 192.168.87.88/32 table tel pref 300
[email&ip rule add from 192.168.101.88/32 table cmcc pref 400
上面操作后会出现一个问题,局域网连接不上啦,因为本机的全部转发给了网关…
解决办法,修改 cmcc 、 tel 路由表加上本地网络或者添加策略路由规则,局域网的走默认路由。(见结尾)
[email&./d
HTTP/1.1 200 OK
Server: Cowboy
Connection: close
Content-Type: text/plain
Date: Mon, 26 Sep 2016 10:13:35 GMT
Content-Length: 14
Via: 1.1 vegur
*******
[email&./d -sip 192.168.87.88
HTTP/1.1 200 OK
Server: Cowboy
Connection: close
Content-Type: text/plain
Date: Mon, 26 Sep 2016 10:13:57 GMT
Content-Length: 13
Via: 1.1 vegur
******
[email&./d -sip 192.168.101.88
HTTP/1.1 200 OK
Server: Cowboy
Connection: close
Content-Type: text/plain
Date: Mon, 26 Sep 2016 10:14:16 GMT
Content-Length: 14
Via: 1.1 vegur
******
可以看到已经可以通过指定本地地址的方式指定出口了。
显示当前策略路由
[email&ip rule list
0: from all lookup local
300: from 192.168.87.88 lookup tel
400: from 192.168.101.88 lookup cmcc
32766: from all lookup main
32767: from all lookup default
显示默认路由表(main)
[email&ip route list
default via 192.168.101.1 dev enp2s0 onlink
default via 192.168.87.1 dev enx00e04c5200a2 metric 30 onlink
10.10.10.0/24 dev zt0 proto kernel scope link src 10.10.10.2
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.87.0/24 dev enx00e04c5200a2 proto kernel scope link src 192.168.87.88
192.168.101.0/24 dev enp2s0 proto kernel scope link src 192.168.101.88
显示指定路由表 main
[email&ip route list table main
default via 192.168.101.1 dev enp2s0 onlink
default via 192.168.87.1 dev enx00e04c5200a2 metric 30 onlink
10.10.10.0/24 dev zt0 proto kernel scope link src 10.10.10.2
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.87.0/24 dev enx00e04c5200a2 proto kernel scope link src 192.168.87.88
192.168.101.0/24 dev enp2s0 proto kernel scope link src 192.168.101.88
显示制定路由表 local
[email&ip route list table local
broadcast 10.10.10.0 dev zt0 proto kernel scope link src 10.10.10.2
local 10.10.10.2 dev zt0 proto kernel scope host src 10.10.10.2
broadcast 10.10.10.255 dev zt0 proto kernel scope link src 10.10.10.2
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 172.17.0.0 dev docker0 proto kernel scope link src 172.17.0.1
local 172.17.0.1 dev docker0 proto kernel scope host src 172.17.0.1
broadcast 172.17.255.255 dev docker0 proto kernel scope link src 172.17.0.1
broadcast 192.168.87.0 dev enx00e04c5200a2 proto kernel scope link src 192.168.87.88
local 192.168.87.88 dev enx00e04c5200a2 proto kernel scope host src 192.168.87.88
broadcast 192.168.87.255 dev enx00e04c5200a2 proto kernel scope link src 192.168.87.88
broadcast 192.168.101.0 dev enp2s0 proto kernel scope link src 192.168.101.88
local 192.168.101.88 dev enp2s0 proto kernel scope host src 192.168.101.88
broadcast 192.168.101.255 dev enp2s0 proto kernel scope link src 192.168uu 锁.101.88
修复之前策略路由造成本地无法访问的问题
[email&ip rule add to 192.168.101.0/24 table main
[email&ip rule add to 192.168.87.0/24 table main=
[email&ip rule
0: from all lookup local
298: from all to 192.168.87.0/24 lookup main
299: from all to 192.168.101.0/24 lookup main
300: from 192.168.87.88 lookup tel
400: from 192.168.101.88 lookup cmcc
32766: from all lookup main
32767: from all lookup default
用 iptables mark 加 iproute2 策略路由 可以实现
大致的命令如下
echo 200 ppp0 >> /etc/iproute2/rt_tables
echo 201 ppp1 >> /etc/iproute2/rt_tables
ip route add default dev ppp0 table ppp0
ip route add default dev ppp1 table ppp1
iptables -t mangle -A PREROUTING -o lo -j ACCEPT
iptables -t mangle -A PREROUTING -m uid --uid 1001 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -m uid --uid 1002 -j MARK --set-mark 11
ip rule add fwmark 10 lookup ppp0
ip rule add fwmark 11 lookup ppp1
是某个程序,需要具体情况具体分析。
由特征决定方法
为何有这需求呢?
不如把 eth0 eth1 作成 bonding 好了