如何在Mac OS X Leopard上通过VPN选择性地路由网络流量?


94

当我从家里连接到公司网络(通过VPN)时,我不想将所有网络流量发送到VPN。例如,当我在家工作时,我希望能够将我的所有文件备份到在家中的Time Capsule中,并且仍然能够访问公司的内部网络。

我正在使用Leopard的内置VPN客户端。我尝试取消选中“通过VPN连接发送所有流量”。如果这样做,我将无法通过curl或Web浏览器访问公司的内部网站(尽管仍然可以访问内部IP)。如果可以选择性地选择一组要通过VPN路由的IP或域,并将其余的保留在我自己的网络中,那将是理想的选择。使用Leopard的内置VPN客户端可以实现吗?如果您有任何软件建议,我也想听听他们的建议。


2
第一种解决方案仅适用于PPP VPN。下面的解决方案将在Cisco VPN(以及其他类型没有什么特定于思科)工作superuser.com/questions/91191/...
博士jimbob

Answers:


83

使用以下内容创建文件/ etc / ppp / ip-up

#!/bin/sh
/sbin/route add <SUBNET> -interface $1 

替换<SUBNET>为子网,您要通过VPN路由(例如192.168.0.0/16)

以root身份执行:

chmod 0755 /etc/ppp/ip-up

每次您连接到VPN时都会执行此文件。

给脚本的参数:

  • $1:VPN接口(例如ppp0
  • $2:未知,就0我而言
  • $3:VPN服务器的IP
  • $4:VPN网关地址
  • $5:用于局域网连接的常规(非VPN)网关

1
Aleksei的小费为我工作。我只是想知道第一行(#!/ bin / sh)是否在做什么。是不是已注释掉。我问这个问题是因为我正在描述这个要在我们公司使用,越简单越好:-)谢谢,埃德加
埃德加·维林加2011年

1
@EdgarWieringa:将您的答案转换为评论。希望更好!:)
studiohack

6
@Edgar-不 第一行很特别。 en.wikipedia.org/wiki/Shebang_(Unix)–
詹姆斯·摩尔

6
在10.7 / Lion上,我的运气更好:/ sbin / route add 172.16.0.0/16 -interface $ 1我看到的ip-up参数是:$ 1 = VPN接口,例如'ppp0'$ 2 ='0'(not (请确定该值是什么)$ 3 =您的VPN IP $ 4 = VPN公共网关IP地址$ 5 =以太网/ wifi的默认网关
Gabe Martin-Dempesy

4
如果配置了两个或多个VPN连接会怎样?如何区分它们,/etc/ppp/ip-up以便可以相应地添加路由?友好的VPN名称是否将作为第六个参数(ipparam)传递?
2014年

11

我想做类似的事情。连接VPN,然后通过该VPN路由其他网络。我最后得到了以下Applescript:

-- Connect Work VPN

tell application "System Events"
    tell network preferences
        tell current location
            tell service "Work"
                connect
                tell current configuration
                    repeat until get connected = true
                        delay 1
                    end repeat
                end tell
            end tell
        end tell
    end tell
end tell

set gateway to "192.168.1.1"

do shell script "route add 172.16.0.0/16 " & gateway with administrator privileges

您需要更改"Work"为VPN连接的名称,192.168.1.1网关地址以及172.16.0.0/16希望路由到的网络的地址。可以通过使用不同的地址重复最后一行来添加其他网络。


1
(此外,对于那些对此IP地址感到疑惑的人:就像发问者所谈论的那样,172.16.0.0 / 16是一个私有地址空间,就像10.xxx和192.168.xx一样,因此,它实际上是VPN的一部分,而不是一些外部网站等等。)
Arjan

1
那么192.168.1.1您的路由器是VPN上的路由器,还是LAN上的路由器?而且,您是否不必将默认路由设置回局域网?
杰克M.10年

8

MacOS的“网络偏好设置”中有一项隐藏功能您可以对接口进行排序

打开系统偏好设置->网络->单击gear左下方->Set service Order...

<code>设置服务订单... </ code> VPN订购

至关重要的是,将网络接口分类为希望使用它们的顺序。如果要将所有非LAN数据都发送到VPN,则将VPN接口放在顶部。像这样排序

  1. 虚拟专用网
  2. 乙太网路
  3. 飞机场

不是这样的:

  1. 飞机场
  2. 乙太网路
  3. 虚拟专用网

这样,无需检查中的以下设置Session Options

通过VPN连接发送所有流量

connection L2TP VPN连接测试


我认为这无法解决问题,除非OP通过以太网备份到Time Machine并连接到公司网络视图Airport(无线连接)
Josh Newman 2010年

1
我使用了ppp启动技巧,但直到将vpn连接移到无线连接下方后,它才起作用。这是一个有效的答案。
Arosboro

这真的是主要的答案!非常感谢,将无法弄清楚!
安德烈·苏亚雷斯

1
这确实适用于L2TP IPSec VPN,但不适用于Cisco IPSec VPN。思科的IPSec VPN是不是在“设置服务订单”对话框中使用
goofology

1

我上网查看了是否可以找到任何东西,据我了解,您似乎希望能够像平常一样使用计算机,同时还能够连接到公司内部网站,因此,您可能需要建立一个自定义的路由表。

该链接显然仅适用于10.4,但命令行内容仍然可以使用。

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.