|
发表于 2009-3-20 21:24:54
|
显示全部楼层
Post by abby;1963670
bind是不可能的,计算机bind了,但ap那边没有bind功能,通讯会发生错误,反而严重影响速度。
用lartc.org里面说的,应用策略路由(多路由表+weight)的方法,只在用p2p软件的时候见效果——某些连接使用第一条线路,另一些连接使用另一条线路。
这个从交换的角度上双网卡就需要双网关,计算机获得双网关是不能同时通讯的。默认还是一个网关通讯。
所以要走路由。路由可以分配网关。但是如何选择路由和判断那条线路空闲。就是另外的一种方式了。
通过dns做轮训可以实现一定的分流。但是无法判断线路负载。
所以这个问题不是很容易解决。
我的设想是:
线路1:
网段A 10.0.0.2 ===================== eth1
网关
10.0.0.1
线路2
网段B 160.0.0.2 ====================== eth2
网关
160.0.0.1
内部通讯
网段C
192.168.0.2 =========================== eth3
网关
192.168.0.1
路由
0.0.0.0 <-----> 192.168.0.1
160.0.0.0<-----> 192.168.0.1
/sbin/router_wifi
#加入eth1的IP指向和网关
#10.0.0.2 是eth1的IP地址;10.0.0.1 是网关
ip rule add pref 10 from 10.0.0.2 table 10
ip route replace default via 10.0.0.1 dev eth1 table 10
#加入eth2的IP指向和网关
ip rule add pref 20 from 160.0.0.2 table 20
ip route replace default via 160.0.0.1 dev eth2 table 20
#为eth3 做路由 (192.168.0.0)
ip route add 10.0.0.2 dev eth1 src 10.0.0.0
ip route add 160.0.0.2 dev eth2 src 160.0.0.0
# 负载均衡 地址为网关
ip route replace default \nexthop via 10.0.0.1 dev eth1 weight 3 \nexthop via 160.0.0.1 dev eth2 weight 1
#刷新CACHE
ip route flush cache
//////////////////////////////////
下边是FIREWALL,模仿这里老大的FIREWALL改的,
#! /bin/sh
UPLINK1="eth1"
UPLINK2="eth2"
UPIP1="10.0.0.0"
UPIP2="160.0.0.0"
ROUTER="yes"
NAT="UPIP"
INTERFACES="lo eth0 eth1 eth2 "
SERVICES="80 22 10000 "
deny=""
case "$@" in
start)
echo -n "Starting firewall..."
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
iptables -P INPUT DROP
iptables -A INPUT -i ! ${UPLINK1} -j ACCEPT
iptables -A INPUT -i ! ${UPLINK2} -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -P OUTPUT DROP
#enable public access to certain services
for x in ${SERVICES}
do
iptables -A INPUT -p tcp --dport ${x} -m state --state NEW -j ACCEPT
done
for y in ${deny}
do
iptables -A OUTPUT -p tcp --dport ${y} -j DROP
iptables -A OUTPUT -p udp --dport ${y} -j DROP
done
#enable system-log
#iptables -A INPUT -j LOG --log-prefix "bad input:"
iptables -A INPUT -p tcp -i ${UPLINK1} -j REJECT --reject-with tcp-reset
iptables -A INPUT -p tcp -i ${UPLINK2} -j REJECT --reject-with tcp-reset
#explicitly disable ECN
if [ -e /proc/sys/net/ipv4/tcp_ecn ]
then
echo 0 > /proc/sys/net/ipv4/tcp_ecn
fi
#disable spoofing on all intefaces
for x in ${INTERFACES}
do
echo 1 > /proc/sys/net/ipv4/conf/${x}/rp_filter
done
if [ "$ROUTER" = "yes" ]
then
#we're a router of some kind, enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
if [ "$NAT" = "dynamic" ]
then
#dynamic IP address, use masquerading
iptables -t nat -A POSTROUTING -o ${UPLINK} -j MASQUERADE
elif [ "$NAT" != "" ]
then
#static IP, use SNAT
#注意这里,将原来的IP伪装改为直接转发!别的事让路由去做
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.0.0/24 -j MASQUERADE
fi
fi
echo "OK!"
exit 0
;;
stop)
echo -n "Stopping firewall..."
iptables -F INPUT
iptables -P INPUT ACCEPT
iptables -F OUTPUT
iptables -P OUTPUT ACCEPT
#turn off NAT/masquerading, if any
#iptables -t nat -F POSTROUTING
echo "OK!"
exit 0
;;
restart)
$0 stop
$0 start
;;
show)
clear
echo ">-------------------------------------------------------------------"
iptables -L
echo ">-------------------------------------------------------------------"
iptables -t nat -L POSTROUTING
exit 0
;;
*)
echo "Usage: $0 {start|stop|restart|show}"
exit 1
esac
上面脚本是网上来的。
这样eth3 192.168.0.x被iptable转到eth1和eth2。
eth1与eth2优先级不同。可以做负载判定,选择出口网关是10.0.0.1还是160.0.0.1。实现负载均衡。
将/sbin/router_wifi赋予可执行权限。
通过/etc/rc.local调用。
请大家看看这种想法是否可以完成。有问题请指出。谢谢 |
|