为特定流量路由WIFI和LAN


12

我的macbook pro上有两个网络设备:

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

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

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

其余流量需要转到WIFI。我曾尝试为特定的IP地址设置路由表,但我只设法弄乱了我的网络。我不会经常冒险进入网络世界,但这是我一直在尝试的最新命令:

sudo route add -host 192.168.2.30 -interface en0

此命令杀死了我使用ping的能力。它告诉我ping无法分配内存(甚至可能)吗?它也杀死了我的无线网络。注销并重新登录解决了该问题。我真的不介意将此解决方案永久化,因此我可以使用临时路由。

编辑:

如果我目前一直在尝试:

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

操作系统处理路由,而不处理硬件。
伊格纳西奥·巴斯克斯

LAN上的所有内容都是192.168.2.X吗?如果是这样,则使解决方案更加简单。
LawrenceC

@ultrasawblade是的,该网络上的所有内容都是192.168.2。*
jakebird451

Answers:


11

如果要与之通信的所有192.168.2.x地址都位于具有192.168.2.x地址的接口下,则无需为该配置手动创建任何路由规则。

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

完成此操作后,netstat -rn仍应显示两个子网的路由,但仅显示“ link#4”路由,而不是通过192.168.2.1的默认路由。

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


谢谢!就是这样!除了路由器字段中的,我一切都设置正确。我在192.168.2.1路由器字段中输入了IP地址,以匹配局域网侧的“路由器”。我认为这是必需的,但现在我看到它已取代了常规流量的默认路由。
jakebird451 2012年

谢谢你!有同样的问题,并为我完美地工作。
BaronVonKaneHoffen'Aug

4

问题在于您的en0接口正在添加默认路由,该路由优先于802.11接口建立的默认路由。我不确定原因为何,但这是BSD倾向于使用有线接口而不是无线接口的事实,或者是BSD倾向于动态配置的接口而不是静态配置的接口。您可以判断出en0Refs列正在使用默认路由。Refs是一个度量标准,用于指示该路由的当前活跃使用数量,因此我们可以看到它正在获取所有流量。

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

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以避免在接口完全启动并建立路由表之前运行该命令。

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


感谢您的长时间回复。默认路由192.168.2.1是问题所在,但是@rakslice发现我在输入en0连接的路由信息​​时出错。我192.168.2.1认为需要将IP地址放在路由器字段中。删除默认路由器ip后,我还删除了到的错误默认路由192.168.2.1。再次感谢您的帮助。
jakebird451 2012年

1
有点沮丧,我没有得到赏金:“我要检查的第一件事是在en0的配置面板中,确保您未在​​路由器字段中输入任何内容。该字段中的信息已添加为默认网关。 ” 最终一切都很好,很高兴您能正常使用。
d34dh0r53,2012年

0

您想将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地址。


我通过网络系统偏好设置将wifi顺序设置为顶部。但是我不确定该怎么做remove any default gateway connected to the LAN
jakebird451 2012年

也许sudo route del default 192.168.2.10?,不是很确定如何在freebsd / mac osx上执行此操作,但是应该类似。
LawrenceC

Mac上的命令是sudo route delete default 192.168.2.10。Ping仍处于活动状态。但是,它会关闭对除路由器ip之外的wifi通信的访问。
jakebird451 2012年

您可以通过wifi上网,对吗,也就是说,如果您不通过局域网仅通过Wifi上网,那么您可以访问Google等外部网站吗?
LawrenceC 2012年

是的,WiFi用于一般流量,例如google.com(主要用于google maps api)
jakebird451
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.