1. 问题
电脑上有多个网卡实现内外网同时互联时,一般会自动完成相应的路由,但有时候需要手动指定操作系统哪些内网请求应使用内网网卡,哪些使用外网。
比如请求的不是内网地址时全默认为外网地址。看上去甚至需要一个独立软件来抓包,然后根据某些内外网的请求、DNS响应等自动管理好路由规则。
简单方式就是手动route
命令配置路由表。
2. 操作步骤
2.1. 保存下述内容
Copy下述内容保存为double_nc.bat
@echo off
:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
@echo on
::删除现有路由表,尤其是针对外网的**0.0.0.0**
route delete 0.0.0.0 -p
route -f
::禁用内网网卡
netsh interface set interface em1 disabled
::禁用外网网卡
netsh interface set interface WLAN disabled
::启用内网网卡
netsh interface set interface em1 enabled
::启用外网网卡
netsh interface set interface WLAN enabled
::睡眠等待系统激活双网卡
timeout /T 5 /NOBREAK
::指定**172.28.157.0**通过**172.28.120.254**网关路由
route add 172.28.157.0 mask 255.255.255.0 172.28.120.254 metric 20
::指定**172.28.158.0**通过**172.28.120.254**网关路由
route add 172.28.158.0 mask 255.255.255.0 172.28.120.254 metric 20
::指定**0.0.0.0**即除上述意外的访问都通过外网的*172.26.222.254**网关路由
route add 0.0.0.0 mask 0.0.0.0 172.26.222.254 metric 20
pause
3. 不同电脑、不同网络环境时的配置
3.1. 修改内外网卡名称
上述命令行假定内网网卡名是emi,外网网卡名是WLAN,须对应修改。
3.2. 修改内网网关
上述命令行假定内网须访问172.28.157.0和172.28.158.0网段,均使用内网172.28.120.254网关。
需修改成实际地址。
3.3. 修改外网网关
上述命令行假定外网须访问使用WLAN网卡的172.26.222.254网关。
需修改成实际地址。
4. 问题
- 发现过执行后直能访问外网,但内网不行,通过
route print -4
查看路由表,发现访问172.128.157.0
的路由的接口被指定到了外网网卡IP地址,但其网关是内网网关,通过再次执行上述命令行就解决了,原因还不清楚,可能是休眠5秒还不够。