OpenVPN每个用户的规则,而不是路由互联网stream量

编辑 :我知道, learn-address是我需要用来调用脚本(在openvpn-netfilter项目中指定)来设置防火墙规则。 我想我的问题更多地涉及到config.ovpn脚本。 你如何configurationclient.ovpn文件同时学习到用户需要哪些路由,同时也保持互联网stream量到用户的ISP?

我有一个关于如何做每个用户防火墙规则的问题,同时也不通过OpenVPN服务器路由Internetstream量。 我正在尝试为我和一群朋友build立VPN服务器,因为我们正在进行一个项目。 我将执行这样的Github项目: https : //github.com/gdestuynder/openvpn-netfilter 。 这将使VPN服务器能够为用户查找ACL,并在服务器端使用iptables来实现它们。 所有其他stream量将被丢弃。

对于我自己的私人家庭VPN,我知道我可以在我的client.ovpnconfiguration中使用以下内容, 通过VPN路由Internetstream量:

 route-nopull route 192.168.1.0 255.255.255.0 

其中, 192.168.1.0/24是我的家庭子网,而10.8.0.0/24 (未显示)是tun适配器的DHCP IP范围。 我知道把它放在客户端的configuration覆盖服务器设置push "redirect-gateway def1 bypass-dhcp"

这是我弄糊涂了:我已经知道我的家庭子网是192.168.1.0/24 ,所以我可以很容易地把它放在client.ovpn文件。 但是,如果我不了解我可以访问的子网/ IP(大多数用户不知道),那么OpenVPN如何dynamic地将每个用户的VPN规则推送到客户端?

换句话说,如果user1访问10.0.2.1010.0.2.10user2访问10.0.2.1010.0.3.4 ,OpenVPN如何知道如何将正确的路由推送给每个用户,同时使用相同的通用client.ovpn组态?

您可以在client-config-dir中使用客户端特定的configuration文件将单个openvpn指令推送到客户端。

在服务器configuration文件中包含指令:

 client-config-dir ccd 

并创build这个目录,以防它在openvpnpath中不存在,例如:

 /etc/openvpn/ccd 

现在在ccd目录中为每个客户端创build一个configuration文件,其名称与客户端的X509通用名称相同。 以下选项在客户端特定的上下文中是合法的: pushpush-resetirouteifconfig-pushconfig

例如,将路由推送到其证书中带有CN user1的客户端:

 echo 'push "route 10.0.0.2 255.255.255.255 10.8.0.1"' >> /etc/openvpn/ccd/user1 echo 'push "route 10.0.2.10 255.255.255.255 10.8.0.1"' >> /etc/openvpn/ccd/user1 

为了这个工作,你需要使用pull指令从服务器端拉取客户端的configuration指令。

你可能在你的client-config里有一个指令client端,这是一个帮助指令,并且扩展如下:

 pull tls-client 

不要使用route-nopull ,因为它会阻止客户端路由。 如果您需要某些客户端上的redirect-gateway来路由所有通过VPN子网的stream量,则可以将该指令放置在这些客户端configuration文件中,而不是放置在所有客户端的服务器configuration文件中。 redirect-gateway指令自动执行路由命令,使所有外出IPstream量通过VPNredirect。 见手册页。

对于任何想要知道替代答案的人来说,下列内容也应该是有用的。 当您使用client-connect脚本时,OpenVPN将一个parameter passing给您的脚本:临时文件的path,您可以在其中添加像“语句push "route 192.168.10.0 255.255.255.0"一样的push "route 192.168.10.0 255.255.255.0" 。 这是一个dynamic的CCD类文件,不需要生成静态CCD文件。