如何在使用2个活动VPN连接时同时访问2个不同10/24网络上的IPv4设备?


0

将公司出售给不同方之后,最终可能会出现旧的10.0.0.0/8网络分为两个或多个不同网络的情况,例如10.0.0.0/24和10.0.1.0/24。

现在我希望使用Mavericks内置VPN客户端同时访问两个网络。一个VPN网络在L2TP上,另一个在PPTP上。

但是,只能访问第一个建立的VPN连接中的设备,而不能访问第二个网络上的计算机。唯一的例外是VPN连接#2的远程IP(网关)。

我该如何解决这个问题并忘记

注意:设置和忘记我的意思是我不想在“拨打”现有的VPN连接配置文件时有额外的步骤。

Answers:


0

路由问题

这里的问题是两个VPN连接配置文件都在一个10网络中,正式附带一个/8aka 255.0.0.0aka 0xff000000网络掩码。因此,当同时建立两个VPN连接时,最终只能在10个网络的路由表中使用一个目标。并且该路由条目将所有10.xxx流量路由到第一个建立的ppp连接,但第二个ppp连接中的本地和远程IP地址除外。

$ netstat -nr -f inet
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.0.1        UGSc           10        0     en0
default            10.0.1.1           UGScI           0        0    ppp0
default            10.0.0.1           UGScI           0        0    ppp1
10                 ppp0               USc             1        0    ppp0
10.0.0.1           10.0.0.12          UHr             2        0    ppp1
10.0.1.1           10.0.1.200         UHr             1        0    ppp0

路由解决方案

修复方法是使用所需条目手动扩展路由表。无需删除10条目,只需添加新的路由条目。只要新添加的路由条目寻址较小的子网,该条目就会具有优先权。请将其读作:子网的/X编号越大。例如/24,然后更高,/8因此10/24条目将优先于10/8路由条目。建立第二个VPN连接后,基本上添加一个新的路由条目,如:$ sudo /sbin/route -n add -net 10.0.2.0/24 -interface ppp1

自动化方案

这很麻烦,并且在建立辅助VPN连接后必须手动输入路由时会引入错误。幸运的是,ppp守护进程内置了一个解决方案if-up,正如您可以阅读的那样$ man pppd。每次建立使用IPv4寻址的ppp(VPN)连接时,/etc/ppp/if-up都会调用script(),您可以在其中执行自定义规则/命令(即挂钩)。

下面的脚本被广泛评论,应该是自我解释的。

您的Mac可能没有此脚本($ ls /etc/ppp)。在这种情况下,$ sudo touch /etc/ppp/ip-up使用e x ecutable权限($ sudo chmod +x /etc/ppp/ip-up)创建it ()。

#!/bin/sh
#
# This script is run by the pppd after the link is established.
# It should be used to add routes, set IP address, etc.
#
# Tested with Mavericks (Mac OS X 10.9)
#
# This script is called with the following arguments:
# Arg   Name            Example
# $0    Script full location    /etc/ppp/ip-up
# $1    Interface name      ppp0
# $2    TTY device      <blank>
# $3    Speed           0
# $4    Local IP address    10.0.0.200
# $5    Remote IP address   10.0.0.1
# $6    LAN gateway     192.168.0.1
# source for $1-$6 is $ man -P 'less -p "    /etc/ppp/ip-up"' pppd

# ppp.log for non english systems do still have an english timestamp
export LC_TIME="C";

# Note: there is no static assignment for ppp0 to PPTP and ppp1 to L2TP
#       therefore $1 isn't useful to differentiate VPN networks

# To debug, uncomment the line below
#echo "$(date +%c) : \$5=$5" >> /var/log/ppp.log

# Add your routing table corrections here
# note: 2>&1 will redirect errors to the standard output
case "$5" in
10.0.0.1) OUT=$(exec /sbin/route -n add -net 10.0.0.0/24 -interface "$1" 2>&1) ;;
10.0.1.1) OUT=$(exec /sbin/route -n add -net 10.0.1.0/24 -interface "$1" 2>&1) ;;
esac

# If standard output is not empty, log it prepended by a timestamp
[ ! -z "$OUT" ] && echo "$(date +%c) : $OUT" >>/var/log/ppp.log

# There is automatic route removal on ppp disconnect.
# So no need to manually remove the above route(s) in /etc/ppp/ip-down

感谢来自jalbrecht2000的想法http://hints.macworld.com/article.php?story=20030906232648318

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.