基本情况
我的电脑同时接入了两个网络,网络a主要是访问外部网站,而网络b主要是访问单位网络。现在面临以下需求 1、我希望默认请求全部都通过网络a,包括网站访问、QQ、微信等软件。 2、对于部分指定的请求通过网络b来访问,主要是单位的系统。
解决方案
我通过在网络设置中,取消两个网络适配器的自动跃点,同时将网络a的跃点数设置为10,将网络b的跃点数设置为30。这样所有的网络请求默认都会使用跃点数更低的网络a来访问。对于部分需要使用网络b来访问的请求,则是通过静态路由来实现,网络b的IP地址是192.168.155.12,则将添加以下静态路由
route -p add 192.218.213.0 mask 255.255.255.0 192.168.155.1
route -p add 192.126.213.0 mask 255.255.255.0 192.168.155.1
之后访问192.218.213网段和192.126.213网段时,就会通过网络b来访问了
新的问题
由于网络a不太稳定,偶尔会自动断开,而网络b虽然是单位网络,但是也提供了外网访问功能。所以就会出现网络a断开,我使用网络b继续访问外网的情况,所以为了避免这种情况(网络b属于单位网络,存在网络审计),我希望系统能够拦截网络b的所有网络请求,只开放固定的端口用于访问单位系统。为了实现这个需求,首先想到的是通过防火墙,首先在防火墙中添加如下规则:
New-NetFirewallRule -DisplayName "阻止网线其他" -Direction Outbound
-Action Block -LocalAddress 192.168.155.12 -RemoteAddress 0.0.0.0/1,128.0.0.0/1
这样所有通过192.168.155.12来访问的请求都会被防火墙拦截,当我的网络a断开时,系统直观的症状就是网络已断开。下一步就是解决如何通过网络b访问单位的系统,我再给防火墙添加如下规则:
New-NetFirewallRule -DisplayName "允许网线_TCP" -Direction Outbound -Action Allow -Protocol TCP
-LocalPort 1-65535 -LocalAddress 192.168.155.12 -RemoteAddress 192.168.155.0/24,192.126.213.0/24
即防火墙放开192.168.155和192.126.213网段。但是现实很残酷,一直是无法进行访问。DeepSeek帮我分析了半天也没有解决,最后发现了原因:Windows 防火墙的“阻止”优先级高于“允许” 在 Windows 防火墙中,如果一个网络请求同时匹配到了一条“允许(Allow)”规则和一条“阻止(Block)”规则,阻止规则永远优先。 你的第一条规则拦截了 0.0.0.0/1 和 128.0.0.0/1(覆盖了所有 IPv4 地址),这意味着随后你添加的所有“允许特定 IP”的规则都变成了废纸。系统在检查白名单之前,就已经被黑名单给枪毙了。
新的方案:移除默认网关
使用移除默认网关的方式,具体操作如下:
- 打开“网络连接”(Win+R 输入 ncpa.cpl)。
- 右键点击你的【单位网线网卡】 -> 属性 -> 双击“Internet 协议版本 4 (TCP/IPv4)”。
- 如果是静态分配 IP,直接将“默认网关”这一栏清空,保留 IP 和子网掩码即可。
- (如果是 DHCP 自动获取的 IP,你需要将其改为静态 IP,并留空默认网关)。 静态路由依然保持不变,现在当网络a断开后,所有指向外网(如百度、微信)的流量会因为找不到 0.0.0.0 的路由而直接报错断开,根本不会走到单位网线的抓包监控里。至此,需求已经完美实现。