电脑加速器上外网VPN
使用OpenVPN有一段时间了,它友好快捷的搭建了异地局域网的问题,在使用的过程中对配置的理解还是很重要的,在此以tun模式为例,说明其在实际使用过程的作用与意义。
首先我们讲下都会讲到的常规配置,由于基本上所有的文章都会讲到,所以在此对部分常用的进行简单阐述:
说明服务运行的端口号,该端口号不能被其它的应用占用,同时需要在防火墙(如有)中做好允许访问的策略。
dev猜想应该是device设备的简称,这里指把OpenVPN做为一个什么类型的网络设备,分别可以设置成服务于3层的TUN(Tunnel)设备,以及服务于2层的TAP(Terminal Access Point)设备。
这里涉及到一些非对称加密的知识,简单来讲就是密钥会成对出现。一个自己保留的叫做私钥,另一个公开传给其它计算机的叫做公钥。
使用公钥进行加密后的数据只能通过私钥进行解密,同样通过私钥进行加密的数据则需要只能公钥来进行解密。
dh指的是Diffie-Hellman算法,这个算法有个神奇的地方在于可以在大庭广众下商量一个只有两个人知道的密钥。
此时,服务端与客户端同时得到2这个数字,2即为服务端与客户端后面在通讯过程中使用的密钥。上述算法由于客户端使用的6与服务端使用的15并没有进行过任何传递,所以除客户端与服务端外,第三方无法计算出密钥2。
ta.key主要是提供了额外的认证机构,在进行认证时,除了进行签名认证,使用密钥对进行测试信息的加密解密外,还要求客户端与服务端的ta.key的值是一致的。需要说明的是:ta.key是一种对称密钥,也就是说:双方使用ta.key加密的数据均可以使用ta.key解密。ta.key在服务器上存一份的同时,在每个客户端上均需要存储一份。
则服务端的IP 将被设置为10.8.0.1,然后客户端 IP也将设置为10.8.0.0/24段中的唯一 IP。这里需要根据客户端的数量来设置子网掩码的长度。在tun模式下,一个TUN会占用两个 IP,也就是说启用一个客户端则会占用两个 IP,所以在24位掩码(255.255.255.0)的情况下,大概可以连接125个客户端。
所以它的意思是说固定客户端的 IP 地址,比如客户端client 在第一次请求时获取的 IP 为 10.8.0.4,则在客户端client断开重连后,其 IP 地址仍然会被设置为 10.8.0.4
核心配置决定了客户端与服务端,客户端与客户端,服务端与客户端所在网络的计算机是否能够正常通读,所以把它们弄懂非常的有必要。
同时由于一般的PC做为客户端时,并不需要执行数据转发等操作,所以基本上0配置,所以在此我们主要阐述路由器做为客户端时的各项配置。
此时两个局域网在进行数据发送时,仅当请求地址为192.168.0.1,才会走tun,所以不会对其它的产生影响。
默认情况下client-to-client配置项并未启用,所以客户端间是不能够进行连接的,要开启该功能,需要先在配置文件中加入:
然后告诉VPN服务器:除了 VPN服务端本身的网段需要通过 TUN 转发外,192.168.0.0/24以及192.168.1.0/24段也需要通过TUN进行转发,配置如下:
两个网段互通的前提时:当向对向网段发起请求时,将数据包转发给tun。所以要在服务端配置下发给客户端的路由:
注意,这里不能写成push route 192.168.0.0 255.255.254.0,虽然在路由表中这种写法与上面两条的写法的作用是相同的。但在此不同。每个网段必须单独的写一条下发路由命令。
该路中的下发会引发客户端的路由地址冲突,因为客户端本身就存在192.168.0.0/24或192.168.1.0/24的路由段,该段的路由转发目的地为网关。会导致局域网访问不通的问题。
ccd文件夹中存放客户端的配置,比如两个客户端名称分别为client, client1,对应0.0以1.0网段。
全连通的示例配置如下,该配置工作在OpenWRT下,如果工作在其它的操作系统上,注意替换user与group的值。
在有些时候,我们并不希望向某些特殊的客户下发所有的路由的信息。这时候就可以在客户端的配置文件中加入:
其实还可以根据配置信息完成更复杂的配置,比如将某个客户端所在网络的其它网络加入到整个 VPN 大网络中。整体对配置总结如下:
服务端路由的作用是配置当前 VPN 服务器的路由信息,在配置文件中声明的路由将加入到 VPN 服务端的路由表中,以达到当 VPN 服务器接收到目标地址的数据转发时,将数据交给 VPN 服务来处理。
路由下发中配置的路由将下发给客户端,客户端在接收到下发的路由后,更新本地路由表,符合路由表的数据将转发给VPN 服务端
ccd下的文件必须与客户端名称相同。在其中可以定义客户端所在的网段信息(可以是多个),它的作用有两个:一是告之 VPN 服务端,当目标地址符合配置的路由时,将数据转发给特定的客户端。二是在向客户端进行路由下发时,忽略配置中的路由地址以避免发生路由冲突。
另外,即使不启用client-to-client电脑加速器上外网VPN,路由的下发也是生效的,此时就会有个尴尬的事情发生:数据按路由指示转发给了VPN 服务端,但由于 VPN 服务端并没有开启client-to-client,从而使得通讯失败。所以如果在服务端上想关闭client-to-client功能,则需要同时删除到配置的所有路由推送。