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.0172.28.158.0网段,均使用内网172.28.120.254网关。

需修改成实际地址。

3.3. 修改外网网关

上述命令行假定外网须访问使用WLAN网卡的172.26.222.254网关。

需修改成实际地址。

4. 问题

  1. 发现过执行后直能访问外网,但内网不行,通过route print -4查看路由表,发现访问172.128.157.0的路由的接口被指定到了外网网卡IP地址,但其网关是内网网关,通过再次执行上述命令行就解决了,原因还不清楚,可能是休眠5秒还不够。

5. 参考

  1. win10 配置双网卡实现同时访问内外网