Open V P N 的lan-to—lan 模式實戰
基礎概念介紹
1. Open ××× 概述
Open ××× (全稱Virtual Private Network)虛擬專用網絡,是依靠ISAP和其他的NSP,在公共網絡中建立專用的數據通信網絡的技術。
2. 隧道協議
PPTP:點對點隧道協議(PPTP)是由微軟和3Com 等公司組成的PPTP論壇開發的一種點對點隧道協議,基於撥號使用的PPP協議
L2TP:第2層隧道協議(L2TP)是IETF基於L2F(cisco的第二層轉發協議)開發的PPTP後續版本,可以創建不同的隧道。支持驗證
IPSec:IP安全協議(IPSec:IP Security)實際上是一套協議包而不是一個獨立的協議,IPSec隧道模式隧道是封裝,
SSL ×××,SSL 協議提供了數據私密性、端點驗證、信息完整性等特性,協商一種加密算法和密碼鑰匙。
3. Open××× 介紹
open***是一個開源軟件,Open×××允許參與建立×××單點使用預設的私鑰,第三方證書,或者用戶名/密碼來進行身份驗證。它大量使用OpenSSL加密庫,以及SSLv3/TLSv1 協。C/S架構
4. 選擇×××建議
1. 硬件產品 負載均衡設備
2. Open××× 功能強大、穩定可靠
5. Open××× 開源產品
Open××× 支持平臺 win linux BSD MAC
6. Open××× 是通過公開密鑰(非對稱密鑰,加密解密使用不同的key)對數據進行加密。
驗證支持第三方的證書,以及用戶名/密碼
7. Open××× 通信原理
所有的通信基於一個單一的IP端口1194,默認使用UDP協議,同時TCP也被支持,Open××× 連接能通過大多數代理服務器,
實踐部署
1. 雙網卡,eth1 外網
eth0 內網
2. 時鐘同步 ntpdate pool.ntp.org
3. Open××× 安裝涉及到2個軟件
open*** 依賴包 openssl openssl-devel lzo-devel lzo pam pam-devel automake pkgconfig libtool
INSTALL:
git clone https://github.com/Open×××/open***
cd open***
git branch -a
git checkout -b 2.2 remotes/origin/release/2.2
git checkout master
autoreconf -i -v –f
./configure --prefix=/usr/local/open***
make
make install
6. 使用easy-rsa 生成服務端證書
cd /tmp/tool/
git clone https://github.com/Open×××/easy-rsa.git
cd easy-rsa/
git branch -a
git checkout 2.x -b remotes/origin/release/2.x
cd easy-rsa/2.0/
cp vars vars.bak
vim vars
sed -i 's/export KEY_COUNTRY="US"/export KEY_COUNTRY="CN"/g' vars
sed -i 's/export KEY_PROVINCE="CA"/export KEY_PROVINCE=" BJ "/g' vars
sed -i 's/export KEY_CITY="SanFrancisco"/export KEY_CITY="BJ"/g' vars
sed -i 's/export KEY_ORG="Fort-Funston"/export KEY_ORG="LNGTOP"/g' vars
sed -i 's/export [email protected]/ export [email protected]/g' vars
sed -i 's/export KEY_CN=changeme/export KEY_CN=***server/g' vars
sed -i 's/export KEY_NAME=changeme/export KEY_NAME=server/g' vars
sed -i 's/export KEY_OU=changeme/export KEY_OU=Network Center/g' vars
初始化參數
source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/open***/easy-rsa/easy-rsa/2.0/keys
./clean-all
##清除keys目錄下所有與證書相關的文件
./build-ca
## 生成根證書ca.crt和根密鑰ca.key
./build-key-server open***
## 爲服務器端生成證書和密鑰
./build-dh
## 會生成dh2048.pem 文件
7. 生成***客戶端證書和密鑰
./easy-rsa/easy-rsa/2.0/build-key xing
## 每一個登錄的××× 客戶端需要證書,每一個客戶端同一時刻只能供一個客戶端連接,需要多個客戶端連接一個證書需要修改配置文件。不建議這樣去做。
8. 修改open*** 配置文件
mkdir /etc/open***
cp /tmp/tool/open***/sample/sample-config-files/server.conf /etc/open***/
# server.conf open***的主配置文件,啓動的時候需要加載這個文件
cp /tmp/tool/open***/sample/sample-config-files/client.conf /etc/open***/
clinet撥號時使用的配置文件
cp /tmp/tool/easy-rsa/easy-rsa/2.0/keys /etc/open***/
# 將生成的keys 目錄拷貝到/etc/open*** 目錄下
Open××× 配置文件
vim /etc/open***/server.conf
將配置文件cp 並且過濾之後修改之後的配置文件如下
cat /etc/open***/server.conf
port 1194
proto tcp
dev tun
ca /etc/open***/keys/ca.crt
cert /etc/open***/keys/open***.crt
key /etc/open***/keys/open***.key
dh /etc/open***/keys/dh2048.pem
server 10.50.50.0 255.255.255.0
push "route 192.168.200.0 255.255.255.0"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/open***-status.log
verb 3
client-to-client
duplicate-cn
log /var/log/open***.log
9. 啓動open***
/usr/local/open***/sbin/open*** --config /etc/open***/server.conf --daemon
[root@localhost ~]# lsof -i:1194
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
open*** 2334 root 6u IPv4 19729 0t0 TCP *:open*** (LISTEN)
6. 客戶端測試
Windows 客戶端測試:
需要下載和服務器端一直的客戶端版本軟件
https://open***.net/index.php/download/community-downloads.html
查看服務器端open*** 版本號,下載對應的客戶端軟件
Windows 下安裝好的open***客戶端軟件
![](http://i2.51cto.com/images/blog/201811/20/29bfe5a5e1609d96ac0fa16c4fd0a39e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
需要從服務器端下載客戶端生成的證書文件包括根證書ca.crt 客戶端證書xing.crt xing.key client.conf 文件,其實客戶端安裝位置也有一個客戶端模板文件,在客戶端安裝路徑下的Open×××\sample-config 目錄下。
Open*** 安裝目錄
![](http://i2.51cto.com/images/blog/201811/20/a8ffe1567c419e4ab82f112be17277db.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
在config 目錄創建一個test 目錄去測試
![](http://i2.51cto.com/images/blog/201811/20/0278713435db3478ca1249079a72386c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
test 目錄下包括從服務器端下載下來客戶端需要的證書文件如下:
客戶端配置如下
client
dev tun
proto tcp
remote 192.168.8.102 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert xing.crt
key xing.key
comp-lzo
verb 3
ns-cert-type server
redirect-gateway
keepalive 20 60
mute 20
route-method exe
route-delay 2
服務器端ip地址如下
撥號成功而且open***客戶端顯示爲綠色,就說明***撥號已經成功了!
7. 外網撥號設置
但是我需要外網能撥號,需要將私有地址的ip端口映射到公網上去,需要在路由器上做一下端口映射。
將本機的私有ip以及端口映射到公網。
虛擬機的ip地址是 192.168.1.52 將192.168.1.52的1194 端口映射到外網
需要開啓路由轉發功能,iptables 需要寫一下規則(這個規則可以再撥通***之後再寫)
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
cat /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -p tcp -m tcp --dport 1194 -j ACCEPT
客戶端需要修改爲外網ip。即可撥號
[root@localhost ~]# curl http://ipinfo.io 獲取出口的ip地址
{
"ip": "118.186.6.146",
"hostname": "No Hostname",
"city": "Beijing",
"region": "Beijing Shi",
"country": "CN",
"loc": "39.9289,116.3883",
"org": "AS23724 IDC, China Telecommunications Corporation"
}
telnet 測試
telnet 118.186.6.146 1194
修改配置文件去連接
client
dev tun
proto tcp
remote 118.186.6.146 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert xing.crt
key xing.key
comp-lzo
verb 3
ns-cert-type server
redirect-gateway
keepalive 20 60
mute 20
route-method exe
route-delay 2
獲取到的open*** 撥號日誌
Tue May 03 10:48:50 2016 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 ECDHE-RSA-AES256-GCM-SHA384, 2048 bit RSA
Tue May 03 10:48:50 2016 [open***] Peer Connection Initiated with [AF_INET]118.186.6.146:1194
Tue May 03 10:48:51 2016 MANAGEMENT: >STATE:1462243731,GET_CONFIG,,,
Tue May 03 10:48:52 2016 SENT CONTROL [open***]: 'PUSH_REQUEST' (status=1)
Tue May 03 10:48:53 2016 PUSH: Received control message: 'PUSH_REPLY,route 192.168.1.10 255.255.255.0,dhcp-option DNS 223.5.5.5,route 10.50.50.0 255.255.255.0,topology net30,ping 10,ping-restart 120,peer-id 0,ifconfig 10.50.50.6 10.50.50.5'
Tue May 03 10:48:53 2016 OPTIONS IMPORT: timers and/or timeouts modified
Tue May 03 10:48:53 2016 OPTIONS IMPORT: --ifconfig/up options modified
Tue May 03 10:48:53 2016 OPTIONS IMPORT: route options modified
Tue May 03 10:48:53 2016 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Tue May 03 10:48:53 2016 OPTIONS IMPORT: peer-id set
Tue May 03 10:48:53 2016 OPTIONS IMPORT: adjusting link_mtu to 1547
Tue May 03 10:48:53 2016 ROUTE_GATEWAY 192.168.1.1/255.255.255.0 I=12 HWADDR=28:d2:44:c7:a5:c9
Tue May 03 10:48:53 2016 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Tue May 03 10:48:53 2016 MANAGEMENT: >STATE:1462243733,ASSIGN_IP,,10.50.50.6,
Tue May 03 10:48:53 2016 open_tun, tt->ipv6=0
Tue May 03 10:48:53 2016 TAP-WIN32 device [本地連接 2] opened: \\.\Global\{8D3815E5-559B-4BF4-86B7-BA0104382578}.tap
Tue May 03 10:48:53 2016 TAP-Windows Driver Version 9.9
Tue May 03 10:48:53 2016 Notified TAP-Windows driver to set a DHCP IP/netmask of 10.50.50.6/255.255.255.252 on interface {8D3815E5-559B-4BF4-86B7-BA0104382578} [DHCP-serv: 10.50.50.5, lease-time: 31536000]
Tue May 03 10:48:53 2016 Successful ARP Flush on interface [23] {8D3815E5-559B-4BF4-86B7-BA0104382578}
Tue May 03 10:48:55 2016 TEST ROUTES: 3/3 succeeded len=2 ret=1 a=0 u/d=up
Tue May 03 10:48:55 2016 C:\windows\system32\route.exe ADD 118.186.6.146 MASK 255.255.255.255 192.168.1.1
Tue May 03 10:48:55 2016 env_block: add PATH=C:\windows\System32;C:\windows;C:\windows\System32\Wbem
Tue May 03 10:48:55 2016 C:\windows\system32\route.exe DELETE 0.0.0.0 MASK 0.0.0.0 192.168.1.1
Tue May 03 10:48:55 2016 env_block: add PATH=C:\windows\System32;C:\windows;C:\windows\System32\Wbem
Tue May 03 10:48:55 2016 C:\windows\system32\route.exe ADD 0.0.0.0 MASK 0.0.0.0 10.50.50.5
Tue May 03 10:48:55 2016 env_block: add PATH=C:\windows\System32;C:\windows;C:\windows\System32\Wbem
Tue May 03 10:48:55 2016 MANAGEMENT: >STATE:1462243735,ADD_ROUTES,,,
Tue May 03 10:48:55 2016 C:\windows\system32\route.exe ADD 192.168.1.10 MASK 255.255.255.0 10.50.50.5
Tue May 03 10:48:55 2016 env_block: add PATH=C:\windows\System32;C:\windows;C:\windows\System32\Wbem
Tue May 03 10:48:55 2016 C:\windows\system32\route.exe ADD 10.50.50.0 MASK 255.255.255.0 10.50.50.5
Tue May 03 10:48:55 2016 env_block: add PATH=C:\windows\System32;C:\windows;C:\windows\System32\Wbem
Tue May 03 10:48:55 2016 Initialization Sequence Completed
Tue May 03 10:48:55 2016 MANAGEMENT: >STATE:1462243735,CONNECTED,SUCCESS,10.50.50.6,118.186.6.146
但是*** 撥號成功之後不能連接外網,需要添加一條iptables 規則
iptables -t nat -A POSTROUTING -s 10.50.50.0/24 -o eno16777728 -j MASQUERADE
因爲*** 客戶端獲取的ip 是10.50.50.0 網段的,他要上網的話是通過 eno16777728 上網
或者添加一條到達對方路由
route add -net