路由 WIFI 和 LAN 以进行特定流量

路由 WIFI 和 LAN 以进行特定流量

我的 MacBook Pro 上有两个网络设备:

  • WIFI(en1):用于一般流量。通过 DHCP 连接到 192.168.19.* 的 IP
  • LAN (en0):用于特定流量。以静态 IP 形式连接到 192.168.2.10 的 IP。不连接到路由器,仅连接到交换机以进行直接路由连接。

我有 4 个需要在 LAN 上访问的 IP 地址:

  • 192.168.2.1
  • 192.168.2.21
  • 192.168.2.20
  • 192.168.2.30

其余流量需要转到 Wi-Fi。我尝试为特定 IP 地址设置路由表,但结果却弄乱了我的网络。我很少涉足网络世界,但这是我最近尝试的命令:

sudo route add -host 192.168.2.30 -interface en0

此命令使我无法使用 ping。它告诉我 ping 无法分配内存(这可能吗)?它还使我无法访问 wifi。注销并重新登录解决了该问题。我真的不介意将此解决方案永久化,所以我对临时路由没意见。

编辑:

如果我目前正在尝试:

sudo route flush
sudo route add default 192.168.19.1

这可以让一切正常工作大约一分钟。但过了一分钟后,它会“忘记”到 WiFi 的路由,同时保留 LAN (en0) 的路由。如果我拔下并重新插入 LAN (en0) 电缆,该过程还可以再工作一分钟。

编辑2:

这些是 d34dh0r53 根据请求输入的一些命令。

$ netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.2.1        UGSc            4        0     en0
default            192.168.19.1       UGScI           0        0     en1
127                127.0.0.1          UCS             0        1     lo0
127.0.0.1          127.0.0.1          UH              5  1429023     lo0
169.254            link#4             UCS             0        0     en0
192.168.2          link#4             UCS             4        0     en0
192.168.2.1        0:27:22:2e:5f:1a   UHLWIi          2        0     en0   1199
192.168.2.10       127.0.0.1          UHS             0        0     lo0
192.168.2.30       90:a2:da:0:f5:63   UHLWIi          1     1433     en0   1191
192.168.2.255      ff:ff:ff:ff:ff:ff  UHLWbI          0        7     en0
192.168.19         link#5             UCS             2        0     en1
192.168.19.1       3e:d0:f8:aa:28:56  UHLWIi          0        2     en1   1192
192.168.19.3       127.0.0.1          UHS             1        0     lo0
192.168.19.255     ff:ff:ff:ff:ff:ff  UHLWbI          0        5     en1

Internet6:
Destination                             Gateway                         Flags         Netif Expire
::1                                     link#1                          UHL             lo0
fe80::%lo0/64                           fe80::1%lo0                     UcI             lo0
fe80::1%lo0                             link#1                          UHLI            lo0
fe80::%en0/64                           link#4                          UCI             en0
fe80::226:4aff:fe00:b68a%en0            0:26:4a:0:b6:8a                 UHLI            lo0
fe80::%en1/64                           link#5                          UCI             en1
fe80::226:bbff:fe03:cbd%en1             0:26:bb:3:c:bd                  UHLI            lo0
ff01::%lo0/32                           fe80::1%lo0                     UmCI            lo0
ff01::%en0/32                           link#4                          UmCI            en0
ff01::%en1/32                           link#5                          UmCI            en1
ff02::%lo0/32                           fe80::1%lo0                     UmCI            lo0
ff02::%en0/32                           link#4                          UmCI            en0
ff02::%en1/32                           link#5                          UmCI            en1
$ traceroute -n 192.168.2.1
traceroute to 192.168.2.1 (192.168.2.1), 64 hops max, 52 byte packets
 1  192.168.2.1  2.499 ms  3.392 ms  3.829 ms
$ traceroute -n google.com
traceroute: unknown host google.com

答案1

192.168.2.x只要您想要通信的所有地址都在该192.168.2.x地址的接口上,您就不需要为该配置手动创建任何路由规则。

  1. 进入系统偏好设置->网络
  2. 选择您的以太网设备,确保“配置 IPv4”设置为“手动”,子网掩码设置为255.255.255.0,并且路由器框为空。

一旦完成此操作,netstat -rn应该仍会显示两个子网的路由,但只有“link#4”路由代替了通过的默认路由192.168.2.1

如果您不想要默认路由,请将路由器框留空。路由器框中的值仅用于通过此网络接口设置默认路由,不用于其他任何用途。

答案2

问题在于您的en0接口正在添加一个默认路由,该路由优先于 802.11 接口建立的默认路由。我不太清楚为什么,但要么是因为 BSD 更喜欢有线接口而不是无线接口,要么是它更喜欢静态配置的接口而不是动态配置的接口。您可以看到列en0正在使用默认路由RefsRefs是一个指标,表示路由的当前活动使用次数,因此我们可以看到它正在获取所有流量。

解决方案是删除该路由,最好是永久从路由表中删除,以便发往本地网络以外主机的流量将通过 DHCP 建立的默认网关en1。我要检查的第一件事是在配置面板中en0确保您没有在router字段中输入任何内容。该字段中的信息将作为默认网关添加。如果这不起作用,我们需要手动删除路由,这route flush不起作用的原因是我相信它会告诉 OS X 从接口配置文件中重新加载它的路由信息​​,因此会在短时间后恢复您的更改。以下命令应删除接口的默认路由,en0直到重新启动网络或对系统进行 IPL:

sudo route delete -net 0.0.0.0 192.168.2.1

如果您想使此更改永久生效,您可以 a) 创建一个服务(/Library/StartupItems对我来说这似乎工作量太大)或者 b)/etc/rc.local使用以下命令添加该行:

echo 'route delete -net 0.0.0.0 192.168.2.1' >> /etc/rc.local

您可能需要sleep <number_of_seconds>在该行之前添加一个命令,/etc/rc.local以避免在接口完全启动和路由表建立之前运行该命令。

希望这会有所帮助并祝你好运!

答案3

您需要将您的 Wifi IP 设置为您的默认网关,并删除连接到 LAN 或 192.168.2.0/24 的任何默认网关(或路由到 0.0.0.0)。

如果您可以将 en1 设置为可与 wifi 配合使用的固定 IP,这当然会更容易。

您可能需要将 192.168.2.10 添加为 192.168.2.0/24 网络的路由。但是,这应该是自动的,因为它可以判断 192.168.2.0/24 是通过您分配给接口的虚拟直接连接的。

因此,去往任何 192.168.2.X 的流量都将从 192.168.2.10 出去,而去往其他任何地方的流量都将从 en1 的 IP 地址出去。

相关内容