一、服务端配置
1、 安装依赖包和open***
yum install openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig -y yum install open*** |
2、生成服务器、客户端证书
#2.3版本需要独立下载个easy-rsa,该包用来制作ca证书,服务端证书,客户端证书 wget -c https://github.com/Open×××/easy-rsa/archive/master.zip unzip master.zip mv easy-rsa-master easy-rsa cp -rf easy-rsa /etc/open*** cd /etc/open***/easy-rsa/easyrsa3 cp vars.example vars #一般情况下,默认的配置可以满足需求,也可以根据需要修改 ./easyrsa init-pki #建立一个空的pki结构,生成一系列的文件和目录 ./easyrsa build-ca #创建ca 密码 和 cn那么需要记住 ./easyrsa gen-req server nopass #创建服务端证书 common name 最好不要跟前面的cn那么一样 ./easyrsa sign server server #签约服务端证书 ./easyrsa gen-dh #创建Diffie-Hellman
#下面是客户端的证书 #首先创建一个工作的目录 cd /home/ mkdir client && cd client cp -R ~/easy-rsa/ ./ #这是解压过的easy-rsa 而不是生成了服务端证书的easy-rsa cd easy-rsa/easyrsa3/ cp vars.example vars
#开始生成 ./easyrsa init-pki ./easyrsa gen-req estate nopass #用自己的名字,如果创建了密码需要记住, cn name是用来区分客户端的,在对客户端做一些控制的时候会有用
#现在客户端的证书要跟服务端的交互,也就是签约,这样这个用户才能使用此*** #切换到server证书目录下 cd /etc/open***/easy-rsa/easyrsa3/ ./easyrsa import-req /home/client/easy-rsa/easyrsa3/pki/reqs/estate.req esate #导入req ./easyrsa sign client esate #用户签约,根据提示输入服务端的ca密码 |
根据以上操作形成以下文件:
CA证书与私钥
/etc/open***/easy-rsa/easyrsa3/pki/ca.crt /etc/open***/easy-rsa/easyrsa3/pki/private/ca.key |
服务端证书与私钥
/etc/open***/easy-rsa/easyrsa3/pki/private/server.key /etc/open***/easy-rsa/easyrsa3/pki/issued/server.crt |
客户端证书与私钥
/etc/open***/easy-rsa/easyrsa3/pki/issued/estate.crt /home/client/easy-rsa/easyrsa3/pki/private/estate.key |
DHM
/etc/open***/easy-rsa/easyrsa3/pki/dh.pem |
3、配置open***
3.1 将服务端证书与私钥和CA证书复制到/etc/open***/server目录
cd /etc/open***/easy-rsa/easyrsa3/pki cp ./private/server.key /etc/open***/server cp ./issued/server.crt /etc/open***/server cp ./ca.crt /etc/open***/server cp ./dh.pem /etc/open***/server |
3.2 server端配置
vim /etc/open***/server.conf local 0.0.0.0 port 1174 #监听端口 proto udp dev tun ca /etc/open***/server/ca.crt cert /etc/open***/server/server.crt key /etc/open***/server/server.key # This file should be kept secret dh /etc/open***/server/dh.pem server 10.8.0.0 255.255.255.0 #分配给客户端的IP段 ifconfig-pool-persist ipp.txt push "route 192.168.1.0 255.255.255.0" #增加内网访问的路由 client-config-dir ccd #指定客户端的IP,根据客户端的common name 匹配ccd目录下的文件名,并读取文件相关内容 duplicate-cn keepalive 10 120 cipher AES-256-CBC persist-key persist-tun status open***-status.log log /var/log/open***.log verb 3 explicit-exit-notify 1 |
4.3 控制客户端IP
控制common name为estate的客户端IP地址,其他common name随机分配
cat /etc/open***/ccd/estate ifconfig-push 10.8.0.5 10.8.0.6 或者写成以下方式: ifconfig-push 10.8.0.200 255.255.255.0 |
特别注意:
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] [237,238] [241,242] [245,246] [249,250] [253,254] |
4、开启×××服务器路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -L -n -t nat #查看NAT表,其他表有filter、mangle |
5、客户端访问控制(在服务端配置,以控制10.8.0.5为例)
#只转发217的80和443端口,其他都拒绝 iptables -A FORWARD -i tun0 -s 10.8.0.5 -d 192.168.1.217 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -i tun0 -s 10.8.0.5 -d 192.168.1.217 -p tcp --dport 443 -j ACCEPT iptables -A FORWARD -i tun0 -s 10.8.0.5 -j DROP |
6、启动open***
systemctl restart open***@server.service
二、客户端配置
client dev tun proto udp remote ***公网地址 1174 #***外网地址 resolv-retry infinite nobind persist-key persist-tun ca /Users/mac/Downloads/openssl/key/ca.crt #相应的证书 cert /Users/mac/Downloads/openssl/estate/estate.crt key /Users/mac/Downloads/openssl/estate/estate.key remote-cert-tls server cipher AES-256-CBC verb 3 |