一、服務端配置
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 |