Total Pageviews

Saturday 30 January 2016

OpenVPN 2.0 HOWTO-局域网互访

一旦VPN以一种客户端和服务端点对点的方式运作,那么就应该扩大范围,客户端不止能访问服务器,而且应该能访问服务器所在的网络的其他机器。
针对这个目的,我们举个例子,假设服务器的内网端使用的是10.66.0.0/24的网段,在OpenVPN服务器配置文件配置的server参数即VPN虚拟IP地址池用的是10.8.0.0/24网段。
首先,VPN客户端通过VPN能访问到10.66.0.0/24 子网,只只要在服务器端的配置文件配置以下参数就能简单做到:
push "route 10.66.0.0 255.255.255.0"
下一步,我们要把服务器端局域内网的网关设置为从VPN客户端10.8.0.0/24网段到OpenVPN服务器的路由(假如OpenVPN服务器和局域网网关不是同一台机器,这个设置就很有必要)。
下一步,我们要为从VPN客户端10.8.0.0/24网段到OpenVPN服务器所在的局域网的网关设置一个路由(假如OpenVPN服务器和局域网网关不是同一台机器,这个设置就很有必要)。
确认你应在在OpenVPN服务器上打开
IP
和 
TUN/TAP
的转发功能。
Including multiple machines on the server side when using a bridged VPN (dev tap)
使用
以太网桥
的好处就是你可以方便,免费的获得它,而无需其他额外的配置。
Including multiple machines on the client side when using a routed VPN (dev tun)
一般典型的远程访问情况是,客户端都是以单机使用VPN。但是如果客户端是本地局域网的网关(如总公司)你希望每台在这个局域网的机器都能通过路由使用VPN。
举个例子,我们假设这个客户端的局域网使用的是192.168.4.0/24的子网,并且那个VPN客户端有一个通用名为client2的证书,我们的目的就是设置一个VPN通道,让客户端局域网内的所有机器能跟OpenVPN服务器局域网端的所有机器相互联系。
安装之前,有一些必须遵守的基本前提:
1:客户端局域网的子网(在我们这个例子中是192.168.4.0/24)不能通过在同一网段的服务器或者其他客户端站点的途径加入到VPN。任何一个子网想加入VPN的通道路由必须是唯一的。
2:客户端必须拥有一个唯一的通用名称在其证书中(我们这个例子叫“client2”),而且duplicate-cn 这个参数不能在OpenVPN服务器的配置文件里被启用。 
首先,我们必须确信客户端的
IP
和 
TUN/TAP
转发功能是打开的。
然后,我们将处理服务器端的配置文件进行一个必要的修改配置,假如服务器配置文件没有提到客户端配置文件的目录,那么添加如下一行。
client-config-dir ccd
上述指令表示,在一个运行的OpenVPN服务器上的默认目录下预先建立一个叫ccd的目录。 在Linux下默认目录是/etc/openvpn 而在Windows下,则是\Program Files\OpenVPN\config当一个新的客户端连接OpenVPN服务器的时候,服务器进程会针对客户端证书中的匹配通用名称来检查这个目录,如果找到与之匹配的文件,就会对这个客户端进行额外配置的处理。
下一步,我们要建立一个名叫 client2 的文件在ccd 目录下,在这个文件里有如下的控制语句:
iroute 192.168.4.0 255.255.255.0
这样,OpenVPN服务器就把192.168.4.0/24 网段的路由添加给client2
下一步,在服务器端的主配置文件上添加如下语句(不是ccd/client2 这个文件):
route 192.168.4.0 255.255.255.0
你可能会问?为什么要有 route 和 iroute 这多余重复的设置? 理由是在iroute 控制从OpenVPN服务器到远程客户端的路由的时候,route控制着从内核到OpenVPN服务器(通过TUN接口)。两者都很重要。
下一步,问问你自己是否允许client2的网段(192.168.4.0/24)和OpenVPN服务器的其他客户之间有网络流量交换,如果是的话,那就在服务器的配置文件中添加如下语句:
client-to-client
push "route 192.168.4.0 255.255.255.0"
这将让OpenVPN服务器为client2客户网段跟其他连接的客户端进行广播通知。
最后一步,这一步经常会忘记,那就是为服务器局域网的网关添加一个直接从192.168.4.0/24到OpenVPN的路由(你可能不需要这一步,假如本身OpenVPN服务器就是这个服务器端局域网的网关)。假如你忘了这一步的设置,当尝试从192.168.4.8机器ping一个在服务器局域网内的机器(非OpenVPN自己ping自己),会输出一个不能到达机器的提示。 但是我们不能不知道如果路由一个ping的回复,因为我们根本不知道怎么到达192.168.4.0/24。 通常的经验做法是,在整个局域网路线通过VPN通道的时候(VPN服务器不是这个局域网的网关机器)之前,我们得保证所有VPN客户端网段到服务器端局域网网关的路由路径。
同样,如果客户端机器运行OpenVPN,而且也不是它本身局域网的网关,那么也得为那台提供其他机器可以通过VPN访问客户端所在局域网途径的机器设置一个从客户端机器到局域网网关的路由。
Including multiple machines on the client side when using a bridged VPN (dev tap)
这个需要更加复杂的设置(实际上可能并不复杂,但要去解释阐述会很复杂):
1:你必须把客户端的TAP虚拟网络接口和客户端本地网卡进行桥接。 
2:你必须手动为客户端的TAP虚拟网络接口设置IP/掩码。 
3:你必须设置客户端的机器使用网桥所在网段的IP地址和掩码,可能会 
查询OpenVPN服务器这边的DHCP服务