需求: 首先我们的需求是这样,我们在外地有三个分部,分别在上海,南京,无锡。这三个地方的同学们需要通过***访问北京办公室内网的某台主机,同时在北京的我们也需要在家里***进到办公室里边进行访问。 实现的方法是通过 open*** server 端指定客户端的专有配置,配置里边可以指定特定客户端的ip地址,之后我可以在iptables的FORWARD链里边,根据指定给客户端的ip地址来指定访问规则,规则的制定是这样的,允许指定ip访问特定主机,然后deny特定主机的所有访问,之后放行其它 open*** 的ip地址访问权限。 系统需求: 1,开启iptables 2,开启路由转发功能 vi /etc/sysctl.conf --->把 net.ipv4.ip_forward = 0 ---> 把最后的0 改成 1 -->保存退出 ---> sysctl -p 3,open*** 安装,网上教程一堆不赘述。 4,根据自己的需求生成对应的客户端证书,我这个例子里边会生成四个,admin,shanghai,nanjing,wuxi 权限划分如下: 上海,南京,无锡 --允许需要访问内网的一台机器上的服务 我们组的同事 --允许访问内网所有的机器 在open*** server的配置文件中添加如下配置 client-config-dir ccd 然后在open*** 目录下建立 ccd 文件夹,根据客户端的名字建立对应的文件,*这里要声明一下,我的open*** 是证书和密码双重认证的,经过我的实验如果想通过客户端配置文件分配指定IP地址给客户端的话,是需要证书认证的,用系统认证方式是行不通的,所以证书的名字和ccd文件里边文件名字一定要一致。只有证书和ccd 里边的文件名字一致时候,open*** 才会把登录用户和ccd 配置文件联系起来。 文件里边指定的ip地址可以根据自己的实际需求指定,但是必须按照最下边分配出来的指定。 文件ccd/shanghai: ifconfig-push 10.8.0.5 10.8.0.6 文件ccd/nanjing: ifconfig-push 10.8.0.9 10.8.0.10 文件ccd/wuxi: ifconfig-push 10.8.0.13 10.8.0.14 ifconfig-push中的每一对IP地址表示虚拟客户端和服务器的IP端点。它们必须从连续的/30子网网段中获取(这里是/30表示xxx.xxx.xxx.xxx/30,即子网掩码位数为30),以便于与Windows客户端和TAP-Windows驱动兼容。明确地说,每个端点的IP地址对的最后8位字节必须取自下面的集合: [ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78] [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158] [161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198] [201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] 这些配置完成之后,我们需要配置iptables 的FORWARD 链了,规则如下边的例子,这里只列举了一组,注意一定是先ACCEPT 需要访问的网段,然后再DROP。最后需要一个ACCEPT all的规则来放行管理员的访问权限。 iptables -I FORWARD -i tun0 -s 10.8.0.5 -d 192.xxx.xxx.x -j ACCEPT iptables -I FORWARD -i tun0 -s 10.8.0.5 -d 192.xxx.0.0/24 -j DROP iptables -A FORWARD -j ACCEP
这样配置完成之后服务器端就ok了,然后就是客户端的配置了,客户端一定要有证书认证,服务器端才能下发指定的ip地址。以下的这两个选项必有才行。
cert xxx.crt
key xxx.key
这样小伙伴们就可以愉快的一起用open*** 玩耍了,这样做如果客户端众多的话需要废点力气。