文档章节

(转)关于双网卡负载均衡

黄正文
 黄正文
发布于 2013/04/03 08:57
字数 2483
阅读 123
收藏 0

 

环境:无线网卡A,IP 192.168.1.8 网关192.168.1.1
   无线网卡B,IP 192.168.1.106 网关192.168.1.1


C:\Windows\system32>route print
===========================================================================
接口列表
16...00 a0 f5 30 5a 36 ......Realtek RTL8187 Wireless 802.11b/g 54Mbps USB 2.0
Network Adapter
13...00 3e fc 09 23 a6 ......Broadcom NetLink (TM) Fast Ethernet
12...00 15 f3 a7 6c c3 ......Intel(R) WiFi 链接 5100 AGN
1...........................Software Loopback Interface 1
17...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3
18...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #4
11...00 00 00 00 00 00 00 e0 Microsoft Teredo Tunneling Adapter
===========================================================================


IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
          0.0.0.0          0.0.0.0      192.168.1.1      192.168.1.8     30
          0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.106     40
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    306
        127.0.0.1 255.255.255.255            在链路上         127.0.0.1    306
127.255.255.255 255.255.255.255            在链路上         127.0.0.1    306
      192.168.1.0    255.255.255.0            在链路上       192.168.1.8    286
      192.168.1.0    255.255.255.0            在链路上     192.168.1.106    296
      192.168.1.8 255.255.255.255            在链路上       192.168.1.8    286
    192.168.1.106 255.255.255.255            在链路上     192.168.1.106    296
    192.168.1.255 255.255.255.255            在链路上       192.168.1.8    286
    192.168.1.255 255.255.255.255            在链路上     192.168.1.106    296
        224.0.0.0        240.0.0.0            在链路上         127.0.0.1    306
        224.0.0.0        240.0.0.0            在链路上       192.168.1.8    286
        224.0.0.0        240.0.0.0            在链路上     192.168.1.106    296
255.255.255.255 255.255.255.255            在链路上         127.0.0.1    306
255.255.255.255 255.255.255.255            在链路上       192.168.1.8    286
255.255.255.255 255.255.255.255            在链路上     192.168.1.106    296
===========================================================================
永久路由:


问题:我们发现,即使是最新的win7,也只是把两路internet作为备用关系,并不能同时利用,问题的关键就是路由表的前两句:
网络目标        网络掩码          网关                   接口          跃点数
    0.0.0.0          0.0.0.0      192.168.1.1      192.168.1.8      30
0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.106     40
        由于两路出口有不同的跃点数,所以30的那路总是被优先使用,40那路始终利用不上。
        那么我们手工把它们改成一样是不是就可以了呢,经测试发现这样处理,所以程序会随机选择internet出口,导致外网IP地址不停地变换,结果就是程序不停地掉线,比如QQ,即便是P2P软件,我们可以通过netstat -n查看到,两路internet都被利用上了,但p2p软件的下载速度反而很低,这是因为你不能固定一个IP给别人流量,导致别人给你的流量也大大减少了。这也是网络上很多同类软件的通病。


解决:就是要把internet上的所有IP地址固定分摊到两块网上就可以了,这可以通过修改路由表实现。


        由于有相同的网关,事情变得复杂起来了,还记得那个if参数吗?对,相同网关,我们可以用if来区分经由不同的网卡出口,比如:
route add 202.0.0.0 mask 255.0.0.0 192.168.1.1 metric 20 if 16
route add 203.0.0.0 mask 255.0.0.0 192.168.1.1 metric 20 if 12
      我们就把两大类IP访问分摊到两张网卡上了。
       如果我们穷举所有的IP分类,并分摊到两张网卡上,问题就解决了。
      那么,如何验证呢?一是看P2P软件的下载流量增加了,二是更具体的用netstat -n查看所有外网连接都被均匀经由两张网卡出去了。
       需要说明的是,该方法只对多点下载有效,比如P2P软件,对单点下载无效。
      为了方便操作,我已把它做成了批命,复制后用记事本编辑一下存为宽带合并.bat执行一下就OK了,批命令会轮询你的网卡中哪些是连上了internet的,支持最多五块网卡同时连通internet。


一下为bat文件内容


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


@echo off
echo.
echo.
echo 请以管理员身份运行此批命令
echo.
echo 运行此命令前:
echo ------请先把各网卡连通internet
echo ------请先行用ipconfig /all查看各网卡对应网关情况
echo.
setlocal EnableDelayedExpansion


rem 获取网卡信息-----------------------------------------
for /f "delims=" %%i in ('route print ^| find "..."') do (
set /a n+=1
set line!n!=%%i
)
echo.


rem 获取网关信息-----------------------------------------
set m=1 & set o=1
:getinter
for /f "tokens=2 delims==" %%i in ('set line%m%') do set line%m%=%%i
set yn=
set /p yn=!line%m%! 是internet通路吗[直接回车默认n][y/n]?:
if "%yn%" == "y" (
for /f "tokens=1,* delims=. " %%i in ("!line%m%!") do set interface%o%=%%i
set /p gateway%o%=...........网关[直接回车默认192.168.1.1]:
if "#!gateway%o%!" == "#" set gateway%o%=192.168.1.1
set /a o+=1
)
set /a m+=1
if %m% leq %n% goto getinter


rem 设置路由-----------------------------------------
echo.


if "#%interface1%" == "#" (
echo 没有internet通路
goto ext
)


if "#%interface2%" == "#" (
echo 只有一块网卡上网,不能负载均衡
goto ext
)


rem 排除IP:10 127 172 169 192
if "#%interface3%" == "#" (
echo 有二块网卡上网,开始负载均衡...
set n1=1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59


61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115


117 119 121 123 125 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163


165 167 171 173 175 177 179 181 183 185 187 189 191 193 195 197 199 201 203 205 207 209 211


213 215 217 219 221 223
set n2=2 4 6 8 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62


64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116


118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162


164 166 168 170 174 176 178 180 182 184 186 188 190 194 196 198 200 202 204 206 208 210 212


214 216 218 220 222
route delete 0.0.0.0 >nul
route add 0.0.0.0 mask 0.0.0.0 %gateway1% metric 30 if %interface1% >nul
for %%i in (!n1!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway1% metric 25 if %interface1%


>nul
for %%i in (!n2!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway2% metric 25 if %interface2%


>nul
goto ext
)


if "#%interface4%" == "#" (
echo 有三块网卡上网,开始负载均衡...
set n1=1 4 7 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88


91 94 97 100 103 106 109 112 115 118 121 124 130 133 136 139 142 145 148 151 154 157 160 163


166 175 178 181 184 187 190 193 196 199 202 205 208 211 214 217 220 223
set n2=2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62 65 68 71 74 77 80 83 86


89 92 95 98 101 104 107 110 113 116 119 122 125 128 131 134 137 140 143 146 149 152 155 158


161 164 167 170 173 176 179 182 185 188 191 194 197 200 203 206 209 212 215 218 221
set n3=3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87


90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 159


162 165 168 171 174 177 180 183 186 189 195 198 201 204 207 210 213 216 219 222
route delete 0.0.0.0 >nul
route add 0.0.0.0 mask 0.0.0.0 %gateway1% metric 30 if %interface1% >nul
for %%i in (!n1!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway1% metric 25 if %interface1%


>nul
for %%i in (!n2!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway2% metric 25 if %interface2%


>nul
for %%i in (!n3!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway3% metric 25 if %interface3%


>nul
goto ext
)


if "#%interface5%" == "#" (
echo 有四块网卡上网,开始负载均衡...
set n1=1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 89 93 97 101 105 109


113 117 121 125 129 133 137 141 145 149 153 157 161 165 173 177 181 185 189 193 197 201 205


209 213 217 221
set n2=2 6 14 18 22 26 30 34 38 42 46 50 54 58 62 66 70 74 78 82 86 90 94 98 102 106 110 114


118 122 126 130 134 138 142 146 150 154 158 162 166 170 174 178 182 186 190 194 198 202 206


210 214 218 222
set n3=3 7 11 15 19 23 27 31 35 39 43 47 51 55 59 63 67 71 75 79 83 87 91 95 99 103 107 111


115 119 123 131 135 139 143 147 151 155 159 163 167 171 175 179 183 187 191 195 199 203 207


211 215 219 223
set n4=4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112


116 120 124 128 132 136 140 144 148 152 156 160 164 168 176 180 184 188 196 200 204 208 212


216 220
route delete 0.0.0.0 >nul
route add 0.0.0.0 mask 0.0.0.0 %gateway1% metric 30 if %interface1% >nul
for %%i in (!n1!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway1% metric 25 if %interface1%


>nul
for %%i in (!n2!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway2% metric 25 if %interface2%


>nul
for %%i in (!n3!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway3% metric 25 if %interface3%


>nul
for %%i in (!n4!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway4% metric 25 if %interface4%


>nul
goto ext
)


if not "#%interface5%" == "#" (
echo 有五块网卡上网,开始负载均衡...
set n1=1 6 11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 101 106 111 116 121 126 131


136 141 146 151 156 161 166 171 176 181 186 191 196 201 206 211 216 221
set n2=2 7 12 17 22 27 32 37 42 47 52 57 62 67 72 77 82 87 92 97 102 107 112 117 122 132 137


142 147 152 157 162 167 177 182 187 197 202 207 212 217 222
set n3=3 8 13 18 23 28 33 38 43 48 53 58 63 68 73 78 83 88 93 98 103 108 113 118 123 128 133


138 143 148 153 158 163 168 173 178 183 188 193 198 203 208 213 218 223
set n4=4 9 14 19 24 29 34 39 44 49 54 59 64 69 74 79 84 89 94 99 104 109 114 119 124 129 134


139 144 149 154 159 164 174 179 184 189 194 199 204 209 214 219
set n5=5 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135


140 145 150 155 160 165 170 175 180 185 190 195 200 205 210 215 220
route delete 0.0.0.0 >nul
route add 0.0.0.0 mask 0.0.0.0 %gateway1% metric 30 if %interface1% >nul
for %%i in (!n1!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway1% metric 25 if %interface1%


>nul
for %%i in (!n2!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway2% metric 25 if %interface2%


>nul
for %%i in (!n3!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway3% metric 25 if %interface3%


>nul
for %%i in (!n4!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway4% metric 25 if %interface4%


>nul
for %%i in (!n5!) do route add %%i.0.0.0 mask 255.0.0.0 %gateway5% metric 25 if %interface5%


>nul
goto ext
)


if "#%interface6%" == "#" (
echo 未作开发,如有需要,请自行扩展...
rem 扩展第六块网卡支持,仅需要参照前面改写此if命令块语句即可,以下同。
goto ext
)


if %o% geq 7 echo echo 未作开发,如有需要,请自行扩展...


:ext
echo.
echo 负载均衡完毕!
echo.
pause


--------------------------------------------------------------------------------------------------------------------------------
     (win7需要以管理员身份运行)


     多网合并时,如果你在使用中有问题,重启就可以了,这个批命令重启就会失效。

© 著作权归作者所有

黄正文
粉丝 14
博文 25
码字总数 14020
作品 0
巴南
程序员
私信 提问
CentOS 6绑定双网卡

最近在寻找单网卡绑定多ip的资料,无意中找到多网卡绑定单ip,这样可以防止单点故障,也可以实现负载均衡。 view sourceprint? vim ifcfg-bond0 view sourceprint? vim ifcfg-eth1 view sour...

good606
2015/04/20
0
0
centos6.5 双网卡绑定

双网卡绑定主要是为了实现设备容错,负载均衡。 1,检查网络配置信息,如下: 2,编辑eth0网卡: 3,编辑eth1网卡: 4,创建一个新配置文件ifcfg-bond0: 5,编辑modprobe.conf文件,添加配置...

haokuan521
2018/07/02
0
0
【DPDK峰会回顾】支撑双十一的高性能负载均衡是如何炼成的

上个月在北京召开的DPDK峰会上,阿里云网络技术专家梁军(刺背)分享了阿里云高性能负载均衡的架构、设计理念,以及在双十一和春晚手淘红包等大流量互联网场景中实践。这篇文章总结了本次大会...

伟耘
2018/07/20
0
0
构建 LVS-NAT 负载均衡群集

构建 LVS-NAT 负载均衡群集 实验环境: 注:LVS 调度器充当网关服务器,要有两个网卡。 配置 NFS 关闭防火墙 ,编辑配置文件: 创建共享的文件夹 ,添加文件的权限: 开启服务 ,发布共享 :...

HHHNDYD
2018/06/21
0
0
bond双网卡绑定总结

bond双网卡绑定总结 什么是bond? 所谓bond,是一种通过把多个物理网卡绑定成一个逻辑网卡实现网卡冗余、负载均衡、提高带宽,从而实现网络性能高可用高可靠的技术。 bond有七种模型: mod0...

黎董
2017/04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

在docker容器中使用非root用户执行脚本 (

应用容器化之后,在docker容器启动时,默认使用的是root用户执行命令,因此容器中的应用默认都是使用root用户来运行的,存在很高的安全风险,那么如何能够使用非root的业务用户来运行应用呢,...

dragon_tech
5分钟前
0
0
那些能帮助你提升十倍开发效率的优质工具

Java世界中存在着很多工具,从著名的IDE(例如Eclipse,NetBeans和IntelliJ IDEA)到JVM profiling和监视工具(例如JConsole,VisualVM,Eclipse Memory Analyzer等)。 在本文中,我将重点介...

乱世当空
6分钟前
0
0
JavaScript面试题总结系列(二)

2. JavaScript对象 2.1 内置对象 Object是JavaScript中所有对象的父对象; 数据封装类对象:Object、Array、Boolean、Number、String; 其他对象:Function、Arguments、Math、Date、RegExp、...

张森ZS
14分钟前
0
0
Mac部署hadoop3(伪分布式)

环境信息 操作系统:macOS Mojave 10.14.6 JDK:1.8.0_211 (安装位置:/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home) hadoop:3.2.1 开通ssh 在"系统偏好设置"->"共享......

程序员欣宸
14分钟前
0
0
windows下disruptor源码由gradle工程转maven工程

github上下载disruptor源码工程,版本为3.3.2。 下载gradle的1.12版本的zip包。注意高版本的gradle会编译报错的,因为在disruptor工程中build.gradle文件中显示的gradle版本为1.12。 配置win...

zjg23
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部