Skip to content
On this page

Mac同时使用无线wifi和有线上网,解决内网外网一起访问的问题

最近到客户现场办公,遇到了一个问题,客户的环境在内网,需要使用网线链接,而且网络只能访问客户环境,无法上外网,这就导致非常不方便。经过一番查找和尝试,发现原来可以通过网络设置和路由设置,实现内网外网同时访问。

场景和方案

首先说一下目前的情况:

  1. 客户的环境是内网环境,需要访问的 ip 网段为 10.224.xx.xx
  2. 同时插入网线和开启 Wi-Fi 的时候,发现 Wi-Fi 根本没起作用,只能访问内网,无法访问外网

方案:

  1. 通过网络偏好设置,自定义网络使用的先后顺序,优先使用 Wi-Fi 上网
  2. 设置 route 给内网环境的网段添加指定路由,使得内网网段的访问走网线而不是 Wi-Fi
  3. 设置定时任务,解决每次重新插入网线需要重新添加路由的问题

网络偏好设置

首先进入网络偏好设置,拿到网线的路由器 IP 信息备用

路由器

然后点击网络列表下面的...点击“设定服务顺序”,按照需要将网外(这里是Wi-Fi)调整到最前面

网络顺序

到这里,网络设置就 OK 了,此时可以发现电脑可以正常访问外网了,但是内网是不能访问的,这是正常的,因为内网目前走的是 Wi-Fi,肯定无法走通。

添加路由

内网需要的是走网线,怎么走?当然是配置路由转发。

首先我们要知道内网需要访问的网段,还有网线的路由器 IP,前面已经都收集到了,这个时候我们只需要添加一条路由配置即可(使用 root 执行),例如:

shell
sudo route add 10.224.xx.xx/24 10.225.xx.xx

其中 10.224.xx.xx 是 内网网段,10.225.xx.xx 是网线连接的路由器 ip

添加完成之后,再去 ping 一下内网 ip 就会发现已经可以通了,此时大功告成。

查询和删除路由

bash
#查询路由
route get 10.224.xx.xx/24
#删除路由
sudo route delete 10.224.xx.xx/24

定时任务

虽然上面我们已经完成了内网外网同时访问,但是有个问题,就是当网线拔出来,再插进去,我们设置的路由就失效了,就需要重新添加路由,所以我添加了一个定时任务,定期检查内网是否通。

脚本很简单:

shell
#!/bin/bash
# 定期添加路由,避免网线拔出来要重新设置

destination=10.224.xx.xx/24
gateway=10.225.xx.xx
ip=10.224.xx.xx

function echo_exit() {
    echo $*
    exit 1
}

[ "$(id -u)" -ne 0 ] && echo_exit "请使用root用户执行脚本"

ping -c 3 -n ${ip}
if [ $? -ne 0 ]; then
    echo 'nok'
    echo "route add ${destination} ${gateway}"
    route add ${destination} ${gateway}
    echo 'set route ok'
fi