为特定stream量路由WIFI和LAN

我的MacBook Pro上有两个networking设备:

  1. WIFI(en1):用于一般stream量。 通过DHCP连接到192.168.19。*的IP地址
  2. LAN(en0):用于特定stream量。 作为静态IP连接到192.168.2.10的IP地址。 不连接到路由器,只有直接路由连接的交换机。

我有4个IP地址需要在局域网上访问:

  1. 192.168.2.1
  2. 192.168.2.21
  3. 192.168.2.20
  4. 192.168.2.30

其余的交通需要去WIFI。 我试图设置一个特定的IP地址的路由表,但我只能设法弄乱我的networking。 我不会经常冒险进入networking世界,但这是我一直在尝试的最新命令:

sudo route add -host 192.168.2.30 -interface en0

这个命令杀死了我使用ping的能力。 它告诉我,ping不能分配内存(甚至可能)? 它也杀了我的无线接入。 注销并回到固定的问题。 我真的不介意让这个解决scheme永久性的,所以我很好,临时路由。

编辑:

如果我目前一直在尝试:

 sudo route flush sudo route add default 192.168.19.1 

这使得一切工作大约一分钟。 但在这样的一分钟之后,它会“忘记”到WiFi的路由,同时保留LAN的(en0)路由。 如果我拔下并重新插入我的局域网(en0)电缆,这个过程工作一分钟。

编辑2:

这些是由d34dh0r53作为请求input的一些命令。

 $ 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 

假设您要与之通信的所有192.168.2.x地址都在192.168.2.x地址的接口下,则不需要为该configuration手动创build任何路由规则。

  1. 进入系统偏好设置 – >networking
  2. select您的以太网设备,确保“configurationIPv4”设置为“手动”,您的子网掩码设置为255.255.255.0,路由器框为空。

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

更新:如果不需要默认路由,可以将路由器框留空。 路由器的值只是用来设置一个通过接口的默认路由,而不用于其他任何东西。

问题是您的en0接口正在添加一个默认路由,该路由优先于802.11接口build立的默认路由。 我不太清楚为什么,但是这可能是BSD宁愿使用有线接口,或者宁愿使用静态configuration的接口。 您可以看到, Refs列正在使用en0默认路由; Refs是一个指标,表明当前的路线使用的数量,所以我们可以看到它获得了所有的交通。

解决方法是从路由表中删除该路由,最好永久保留路由表,以便到达本地networking以外的主机的stream量通过en1上的DHCP所build立的默认网关。 我要检查的第一件事是在en0的configuration面板中,确保您没有在router字段中input任何内容。 该字段中的信息被添加为默认网关。 如果这不起作用,我们需要手动删除路由, route flush不起作用的原因是我相信它告诉OS X从接口configuration文件重新加载它的路由信息​​,因此在短时间内恢复您的更改。 以下命令应删除en0接口的默认路由,直到重新启动联网或系统为IPLed:

 sudo route delete -net 0.0.0.0 192.168.2.1 

如果你想使这个改变永久,你可以a)在/Library/StartupItems创build一个服务,这对我来说似乎是太多了,或者b)使用如下命令将该行添加到/etc/rc.local中:

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

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

希望这有助于和祝你好运!

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

这当然更容易,如果你可以设置你的en1到一个固定的IP,将使用WiFi。

您可能需要添加192.168.2.10作为到192.168.2.0/24networking的路由。 但是,这应该是自动的,因为它可以告诉192.168.2.0/24是通过虚拟分配的接口直接连接的。

因此,stream向192.168.2.X的stream量将会超出192.168.2.10,stream量将从您的en1的IP地址stream出。