ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

单网卡双IP实现内外网同时访问:路由表配置详解

单网卡双IP实现内外网同时访问:路由表配置详解 简介单网卡同时上内外网的路由设置方案面向同时接入单位内网与互联网、又不想依赖代理或双网卡的用户通过修改路由表实现单物理网卡双IP访问。资源为一份PDF教程共1个文件大小约258KB内容围绕双IP绑定、网关配置与批处理路由规则展开。教程给出完整操作流程先为网卡绑定内网如10.85.11.207与外网如192.168.10.135两个IP再通过route命令删除默认路由、分别添加指向外网与内网网段的转发规则解决了传统代理逐程序配置繁琐、部分程序不支持代理的痛点。配套批处理脚本示例可直接参考还包含连通性ping验证方法与常见掩码范围调整说明适合网络管理员、机房运维人员及有内网外网并发需求的办公用户已有94人学习。1. 单网卡同时上内外网两个网关一个出口路由表里分道走单网卡同时上内外网听起来像玄学其实核心就是几条route命令的事。很多学校、单位的办公电脑桌面只有一根网线上内网时要把 IP 改成 10.85.11.x上外网再改回 192.168.10.x一天来回改七八遍改到后面连掩码都背下来了。这套路由设置方案要做的事很简单给同一块网卡绑两个 IP再用批处理把路由表分开指路——内网流量走 10.85.11.1外网流量走 192.168.10.1。不需要双网卡不需要代理服务器也不用来回拔插网线。适合两类人一类是内网有业务系统、外网有办公需求的普通用户另一类是要批量给同事配电脑的运维。这篇笔记会把绑定双 IP、批处理路由、常见坑和验证方法都拆开讲看完你可以直接照抄配置。2. 双IP绑定一个网卡两个身份网关先空着先说原理一块网卡在操作系统层面可以同时持有多个 IP 地址每个 IP 属于不同网段时这块网卡就同时具备了两个网段的“身份”。Windows 的 TCP/IP 设置里就提供了这个入口不需要额外装任何软件。2.1 高级TCP/IP设置里添加第二个IP操作链路如下按Win R输入ncpa.cpl回车打开网络连接窗口。右键正在使用的网卡一般是“以太网”或“本地连接”点“属性”。双击“Internet 协议版本 4 (TCP/IPv4)”点右下角“高级”。在“IP 设置”标签页的 IP 地址列表里依次点“添加”把两个 IP 都填进去。IP 地址 1192.168.10.135 子网掩码 1255.255.255.0 IP 地址 210.85.11.207 子网掩码 2255.255.255.0外网 IP 放在第一条内网 IP 放在第二条。Windows 会把列表第一条当作主 IP某些对 IP 敏感的程序会优先读取主 IP。如果网卡之前是 DHCP 自动获取高级列表里的“添加”按钮是灰的要先在 TCP/IPv4 属性里改成“使用下面的 IP 地址”填一个主 IP 后再进高级添加第二个。2.2 网关先空着两个默认网关会让路由表打架绑定双 IP 时最容易犯的错就是在 TCP/IP 设置里把两个网关都填了。你填一个网关Windows 就会自动生成一条0.0.0.0默认路由填两个网关系统会生成两条默认路由然后按接口跃点数选一条用另一条基本是死条目。这时候你根本没法控制内网流量走哪个出口。很多教程让你在这里把网关留空原因就在这里——先让路由表保持干净后面由批处理脚本统一指定默认网关而不是让操作系统随机选。所以这一步的要求很明确两个 IP 都只填地址和掩码默认网关一栏保持空白。如果系统提示“你输入的 IP 地址和子网掩码与默认网关不在同一网段”说明前面有残留配置清掉再继续。2.3 ping网关通过只是入场券别急着下结论接好网线后用命令行验证两个网关的连通性ping 192.168.10.1 ping 10.85.11.1两条命令都通说明网卡到两个网段的二层链路是通的交换机端口也放行了对应 VLAN。10.85.11.1 不通的话多半是交换机这个端口没放行内网 VLAN不用急着往下配路由。注意这一步只能证明物理链路就绪。此时默认网关还没设置直接 ping 外网域名大概率是不通的这很正常不用纠结。真正判断路由配置是否成功是后面脚本跑完以后的事。3. 路由设置批处理先删默认路由再分流三行命令的背后逻辑双 IP 绑定完成后路由表里并没有自动形成“内网走内网网关、外网走外网网关”的规则。Windows 默认只会生成有限几条直连路由跨网段的流量全靠默认路由转发。所以核心工作是用批处理手工往路由表里写规则。3.1 批处理代码与逐行参数拆解下面是完整脚本我加了注释和回显提示echo off echo 查看当前路由表 route print echo 删除现有默认路由避免出口冲突 route delete 0.0.0.0 echo 添加外网默认路由流量走外网网关 route add 0.0.0.0 mask 0.0.0.0 192.168.10.1 echo 添加内网路由10网段流量走内网网关 route add 10.0.0.0 mask 255.0.0.0 10.85.11.1 echo 路由设置完成 pause第一句route print是确认当前路由状态方便对比前后差异。第二句route delete 0.0.0.0是删除所有默认路由。如果双 IP 绑定阶段不小心填过网关这里能一并清掉。为什么要先删因为route add 0.0.0.0加的是同一条默认路由老条目还在的话新加的条目不一定被系统采用等于白加。第三句route add 0.0.0.0 mask 0.0.0.0 192.168.10.1的格式是“目标网络 掩码 网关”。0.0.0.0 mask 0.0.0.0是通配写法意思是除了下面专门指定的网段外其余流量全部发给 192.168.10.1也就是外网出口。第四句route add 10.0.0.0 mask 255.0.0.0 10.85.11.1专门为内网网段指路。10.0.0.0 mask 255.0.0.0覆盖整个10.x.x.x地址段凡目标是 10 开头的 IP都交给内网网关 10.85.11.1。路由选路按最长前缀匹配这条规则比默认路由更具体所以内网流量不会走到外网去。3.2 按实际网段改写脚本内网不一定是10段上面的脚本参数不是死写的。如果内网是172.16.20.30、网关是172.16.20.1对应命令要改成route add 172.16.0.0 mask 255.255.0.0 172.16.20.1这里掩码255.255.0.0对应172.16.0.0/16覆盖172.16.x.x整个 B 段。如果内网只有一小段比如192.168.200.0/24则写成route add 192.168.200.0 mask 255.255.255.0 192.168.200.1外网网关不确定时先运行ipconfig看当前网卡上的默认网关是哪个route add 0.0.0.0 mask 0.0.0.0后面就填那个地址。掩码和目的网段必须一一对应否则会出现“路由加进去了但不生效”的情况。3.3 管理员权限跑bat否则route命令会静默失败route命令修改路由表属于系统级操作Windows 的 UAC 默认会拦截。双击运行 bat 时如果没提权route delete和route add都会报“请求的操作需要提升”而且窗口一闪而过很多时候你根本来不及看。所以 bat 文件必须右键选择“以管理员身份运行”。嫌每次右键麻烦可以给 bat 创建快捷方式点快捷方式属性 → 高级 → 勾选“用管理员身份运行”以后双击快捷方式就行。不建议在 bat 里写runas /user:administrator这类提权语句密码明文暴露在脚本里有安全风险。4. 避坑与排查路由设置里最常见的五个翻车点路由设置本身不复杂但越简单的东西越容易在细节上翻车。这里按“现象 → 原因 → 解决”的顺序记录五个高频问题都是我实际帮同事配置时踩过的。4.1 内网掩码范围太窄255.255.255.0只放行了一个子网现象批处理跑完外网正常ping 10.85.11.5能通但访问同属内网的另一台服务器10.85.12.20就是不通。原因脚本里写的是route add 10.0.0.0 mask 255.255.255.0 10.85.11.1。10.0.0.0 mask 255.255.255.0只匹配10.0.0.0到10.0.0.255这个子网10.85.11.x、10.85.12.x 全都不在匹配范围内。这些地址会按默认路由丢给外网网关外网网关没有回内网的路由所以表现为“部分内网通部分内网不通”。解决掩码改成255.0.0.0对应10.0.0.0/8覆盖整个 10 段。这也是我见过最多人踩的坑说句血泪经验内网路由的掩码宁大勿小范围写大了最多是多走一点路由匹配时间写小了直接访问不了目标。4.2 外网网关ping通了网页却打不开先查默认路由和DNS现象脚本执行完ping 192.168.10.1通但浏览器访问外网页面一直转圈超时。原因这类现象十有八九是默认路由被删了但没加回来。route delete 0.0.0.0执行成功后如果后面的route add 0.0.0.0因为权限或网关写错而失败路由表里就只剩内网那条规则所有非内网流量没有出口。另一个常见原因是 DNS 配置不对ping 网关只能验证链路验证不了域名解析。解决先跑route print看路由表里有没有0.0.0.0开头的默认路由条目。没有就重新以管理员身份执行完整脚本。默认路由在但网页还是打不开就ping 223.5.5.5测试公网 IP 连通性通了再去 TCP/IP 设置里补 DNS 服务器。4.3 重启后路由规则掉光临时路由与永久路由的区别现象配置完当时内网外网都正常电脑重启后内网又访问不了外网反而正常。原因不带-p参数的route add添加的是临时路由存在于内存里的路由表重启后自动清空。Windows 只有带-ppersistent持久化参数的路由才会写入注册表重启后仍然保留。解决要么每次开机手动运行一次 bat要么把脚本放进启动目录下一章会讲要么把关键路由改成持久路由例如route add 10.0.0.0 mask 255.0.0.0 10.85.11.1 -p持久路由不是越多越好网络环境变了要记得先route delete清理旧条目不然新旧路由混在一起更难排查。4.4 bat里的中文乱码编码问题比路由还误事现象bat 文件双击运行中文提示变成一串乱码命令本身勉强能跑但看着非常难受容易把参数抄错。原因Windows 自带的记事本默认按 ANSIGBK保存文本但很多人会用 VS Code 或其它编辑器保存成 UTF-8。cmd 解释器默认按 ANSI 解析 bat 文件UTF-8 的中文编码就对不上了。解决用记事本另存为编码选择“ANSI 编码”再保存。或者干脆把 bat 里的中文 echo 提示全部写成英文一劳永逸。批处理里注释也尽量用英文避免同样的问题。4.5 改挂后怎么紧急恢复把默认路由加回来现象手一抖把0.0.0.0默认路由删了route add又没执行成功整台电脑上不了网内网外网全断。原因默认路由是网络流量的总出口删除后没有任何兜底规则所有非直连网段的数据包都找不到下一跳。解决在命令行补一条默认路由网关填之前ipconfig里记录的原默认网关route add 0.0.0.0 mask 0.0.0.0 192.168.10.1如果不知道原网关也可以用route print看备份文件见下一章的备份方案。最粗暴的做法是拔插网线或重启网卡让 DHCP 重新下发配置并重建默认路由。进入“网络连接”→ 右键网卡 → 禁用 → 重新启用系统会重新生成一张相对干净的路由表。5. 开机自启与后悔药让路由脚本在登录时自动生效配置一次容易每次开机都要配置一次那就是折磨。把路由脚本做成开机自启同时保留一份路由表备份是正式落地这套方案的最后一步。5.1 启动目录放bat别忘了处理UAC提权Windows 启动目录是登录时自动执行程序的入口。把 bat 直接丢进启动目录是第一步但直接放进去会有一个致命问题启动目录里运行的 bat 默认不带管理员权限route add照样会失败。正确做法是在 bat 上右键 → 创建快捷方式。右键快捷方式 → 属性 → 快捷方式标签页 → 高级。勾选“用管理员身份运行”确定。按Win R输入shell:startup回车把快捷方式复制进去。这样每次登录系统都会先弹一次 UAC 确认框确认后 bat 自动以管理员身份执行。嫌弹窗麻烦的可以用任务计划程序创建开机任务触发器选“登录时”操作里指定运行这个 bat并勾选“使用最高权限运行”比快捷方式方式更稳。5.2 备份路由表出问题时最管用的一道保险改路由之前先把当前完整路由表导出一份这是管用的“后悔药”。在命令行执行route print route_backup.txtroute print输出完整路由表重定向到当前目录下的route_backup.txt。想带日期的话可以稍微改一下route print %USERPROFILE%\Desktop\route_backup_%date:~0,4%%date:~5,2%%date:~8,2%.txt这段里%USERPROFILE%\Desktop是桌面路径%date:~0,4%取当前年份%date:~5,2%取月份%date:~8,2%取日期。需要注意%date%的格式在不同语言系统里可能有差异拿不准就直接用固定文件名信息不会丢。备份文件里记录的是你配置之前的默认网关、外网网段、内网网段。路由改挂了打开这个文件就能知道原来的 0.0.0.0 默认路由走的是哪个网关手动route add加回去就能快速恢复。5.3 自启脚本和route add -p选哪个更省心开机自动跑 bat 和route add -p持久化路由两条路都能解决重启失效问题取舍点不太一样方案优点注意点启动目录自启 bat灵活性高改脚本内容即可调整路由规则适合网络环境经常变需要处理管理员权限如果用户不登录系统自启脚本不会执行route add -p持久路由重启后路由仍然保留不依赖用户登录改网段后必须手动清理旧条目查问题时容易忽略残留规则我自己的习惯是办公室网络拓扑稳定、需求明确的机器用route add -p今天可能要插内网、明天可能要换外网专线的同事一律用启动目录脚本改起来不用一台一台登进去删路由。多环境办公的机器脚本方式通用性更强也更容易排查。6. 路由设置验证tracert第一跳就是最终答案路由配置完验证环节最容易被忽略。很多人ping通网关就说成了实际上 ping 通只能证明链路层通证明不了数据包走了你想要的那条路。真正直观的验证手段是tracert它能看到数据包实际路径上的每一跳。6.1 用tracert -d同时验证内网与外网走向假设内网有一台业务服务器10.85.12.5外网随便找一个公网 IP比如223.5.5.5。在命令行分别执行tracert -d 10.85.12.5 tracert -d 223.5.5.5-d参数是关闭反向域名解析默认情况下tracert会对每一跳 IP 做域名反查在内网环境里经常超时加了-d后会快很多输出也干净。看结果的时候只看第一跳tracert 10.85.12.5的第一跳是10.85.11.1说明内网路由生效tracert 223.5.5.5的第一跳是192.168.10.1说明默认路由正确。如果内网地址的第一跳显示192.168.10.1说明内网流量没有命中内网路由跑去了外网网关这时候要回头检查route add 10.0.0.0那条命令的掩码和网段。如果第一跳就显示请求超时优先检查目标地址是否可达而不是怀疑路由本身。6.2 判断路由对错的边界ping通不等于路由正确ping 网关通了只能说明这台机器和网关之间的链路没有问题。内网业务系统能 ping 通也不代表路由没配错——如果外网网关配了回程路由数据包绕经外网走一圈也能到内网只是延迟高、路径不对等哪天外网网关调整了这条回程路由业务立刻断掉。所以我的判断标准一直是两个动作配合route print看规则有没有落表tracert -d看实际路径走没走对。规则在表里但不生效通常是掩码范围或匹配顺序的问题规则不在表里基本就是管理员权限或执行时机的问题。从那以后我每次给同事配完单网卡双 IP都强制自己走一遍这两条tracert第一跳不对就立刻回滚绝不让对方带着半吊子配置去开工。这套流程虽然多花一分钟但比事后被人拉去救火省力得多希望帮到你。本文还有配套的精品资源点击获取
返回列表