解决双网卡机器同时访问内外网的问题

本文提供了一种在Windows环境下,通过手动配置路由解决双网卡接入不同网络(内网与外网)时,如何同时访问内外网的方法。包括详细步骤、批处理脚本及原理解析。

以前为了方便测试,我在自己的电脑(不是服务器)安装了双网卡,双网卡接入的是两个不同的网络但都可上网。最近为了搭建和测试VPN,我将其中一块网卡接入一个小型内网(即不能访问Internet),此时便遇到问题:只能访问那个小型内网,却无法访问Internet,经查阅众多解决方案后,觉得还是手动添加路有点比较好,同时区分优先权。

以下是系统环境与解决方案:

本机内网IP:192.168.3.172    子网掩码:255.255.255.0  内网网关:192.168.3.240    (不可访问Internet)

本机外网IP:192.168.1.199    子网掩码:255.255.255.0  内网网关:192.168.1.1       (可访问Internet)

方案:

打开“运行”〉输入“CMD”,然后输入以下命令:

route delete 0.0.0.0 mask 0.0.0.0 192.168.3.240             #删除内网网关

route change 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 2          #改变默认外网网关优先权为2,220.184.16.118为外网分配的ip地址

route add 192.0.0.0 mask 255.0.0.0 192.168.3.240 metric 1     #添加内网路由点,且优先权设置为1

现在终于可以内网外网同时访问了,但问题依然有,重启之后这些更改就失效,需要重新配置,如果你会写DOS批处理,可以在开机的时候自启动就好了,以下是我写的批处理参考:(复制到记事本,网关自己更改,然后把后缀改为.bat即可)

@ echo off

route delete 0.0.0.0 mask 0.0.0.0 192.168.3.240           

route change 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 2         

route add 192.0.0.0 mask 255.0.0.0 192.168.3.240 metric 1

很简单吧,呵呵


其实也有更简单的方法,只是上边的方法适合测试或不常用双网卡实现内外网的,但公司里确实需要固定的,这就手动调整就显得太麻烦了

下面再介绍一种方法:

首先介绍一下路由原理:双网卡机器一般内网网卡ip都设置了网关地址,而windows默认网关只能有一个,不上外网的情况下默认网关就是内网网关,使用外网上网后默认网关自动改为外网分配的ip,可以使用route print查看,即所有数据流都流向外网网卡ip,导致此时不能访问内网。用route print命令查看此时的路由情况不难发现地址0.0.0.0(可以把0看成通配符)开始的路由点有两个,一个是内网网关,一个是外网ip,而外网ip成了默认网关。因此我的思路是:不用内网网关,将内网网关做成永久路由点且仅过滤内网网段(192开头的ip数据),而不改变外网的默认网关,这样根据优先权,访问内网的数据会从永久路由点走,其它数据从外网的默认网关走(路由表设置的特殊地址除外),从而达到目的。具体方法如下:
        到内网本地连接属性设置中记住网关ip地址并删除内网网关,运行CMD窗口,运行以下命令route -p add 192.0.0.0 mask 255.0.0.0 192.168.3.240(创建永久路由点),结束。这样未连接外网时正常访问内网,连接外网后能同时访问内外网。


现在很多企业为了安全都是使用内外网的,希望以上信息对你有所帮助

 

***************************************************

route add命令的主要作用是添加静态路由,通常的格式是:
route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2
参数含义:^destination ^mask ^gateway metric^ ^interface
destination【网段地址】
mask【子网掩码】
gateway【网关地址】
metric 【路由跳数】
if【端口号】
一般情况下,不涉及本机地址,除非你要做测试。
其中:
可以省略【路由跳数】参数;
当通往该网关地址的路径唯一时,【端口号】参数可以省略。(因为在多端口的路由交换设备上,可能存在通往同一个IP地址的多条备份路径。)
mask 是关键字,不能省略。
route add 134.105.0.0 mask 255.255.0.0 134.105.64.1
意思是:所有需要发往134.105.0.0/16地址段的IP数据包,全部由134.105.64.1路径转发。
这个命令在大型IP网络组建时经常用到,在不同厂商的设备上命令格式可能不同,但原理是一样的。
如果有多条路由,根据不同的路由协议(比如rip, ospf等)的规定,一般优先选择网段地址小的路由。比如,当以下两条路由同时被添加的时候:
route add 134.105.0.0 mask 255.255.0.0 134.105.64.1
route add 134.105.128.0 mask 255.255.128.0 134.105.0.1
目标地址是134.105.128.1的IP包会优先选择第二条路由。
***************************************************

 

### Kali Linux 配置内外网双网卡 在 Kali Linux 中配置内外网双网卡通常涉及设置两个不同的网络接口,分别用于连接内部局域网和外部互联网。以下是详细的说明: #### 1. **识别网络接口** 使用 `ip` 或者 `ifconfig` 命令来查看当前系统的网络接口设备名称。 ```bash ip addr show ``` 这会显示所有的网络接口及其状态[^1]。 #### 2. **编辑网络配置文件** 编辑 `/etc/network/interfaces` 文件以定义每个网络接口的行为。 打开终端并运行以下命令: ```bash sudo nano /etc/network/interfaces ``` 添加如下内容(假设外网接口为 eth0 和内网接口为 wlan0): ```plaintext auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet dhcp allow-hotplug wlan0 iface wlan0 inet static address 192.168.1.2 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4 ``` 上述配置中,eth0 是通过 DHCP 获取 IP 地址的外网接口;wlan0 则被手动分配了一个静态地址作为内网接口。 #### 3. **启用路由转发功能** 修改 `/proc/sys/net/ipv4/ip_forward` 的值为 1 来开启 IPv4 路由转发支持。 ```bash echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward ``` 如果希望永久生效,则可以修改 `/etc/sysctl.conf` 文件中的参数: ```bash sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf ``` #### 4. **设置 NAT 规则** 使用 iptables 设置 NAT 规则以便让内网流量能够通过外网接口访问 Internet。 ```bash sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT ``` 若要保存这些规则以防重启丢失,可安装 `iptables-persistent` 工具包并将现有规则导出到其管理范围之内。 ```bash sudo apt-get install iptables-persistent sudo service netfilter-persistent save ``` #### 5. **验证配置** 测试是否可以从内网机器成功 ping 外部网站以及确认数据流经正确路径。 ```bash ping google.com traceroute google.com ``` 上述过程涵盖了从基础硬件驱动加载至高级防火墙策略部署的一系列步骤,在实际应用过程中可能还需要针对具体环境调整某些细节部分。 ```python import os def check_network(): """简单检测网络连通性的函数""" result = os.system('ping -c 1 www.google.com') if result == 0: print("Network is up.") else: print("Network is down.") check_network() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值