常在項目中遇到外地的客戶碰到問題,但無法在電話中解決,需要在機器上進行分析和處理。第一個想到的就是遠程登陸,但對方沒有公網IP,怎麼辦?此時,如果有個***通道該多好。所以,我決定搭建一臺***服務器以方便今後的維護,順便也再熟悉一下相關的配置。
***硬件是不用考慮的,費用太高。而且既然已經熟悉了Linux環境,當然還是在該環境下尋找了。考慮兩點:
1、安全性第一,配置方便;
2、支持多平臺連接,畢竟使用Windows桌面的用戶還是很多的。
考慮再三,決定使用Open***來實現。
一、原理
Open***是基於SSL的***,其使用工業標準的SSL/TLS協議實現第2層和第3層的安全數據鏈路***。最新版本是2.0.7,其優點包括:
1、基於SSL協議,安全,並使用單一TCP或UDP端口即可實現;
2、使用雙向驗證,服務器只需保存自己的證書和密鑰;
3、服務器只接受那些由主CA證書籤名的客戶端,並有撤回機制,而不需要重建整個PKI;
4、可以實現基於Common Name的權限控制。
官方網站:這裏
rpm下載:點擊
依賴的lzo包:點擊
※注意,Open***是基於SSL/TLS協議的,所以是不兼容IPSec和PPTP,在Windows也需要安裝客戶端
二、網絡架構
Open***可以實現多點對單點,以及點對點的***功能。今天我們先以一個簡單的案例來說明,後續再詳細描述更深入的配置。
架構如下:
說明:
1、遠程客戶端通過Internet網絡連接到公司網絡(模擬成192.168.1.0網段),並建立10.8.0.0的***通道;
2、公司內部網絡爲192.168.100.0網段,假設只有一臺主機;
3、目標是客戶端和後臺主機可以雙向互通。
三、安裝配置
1、首先下載相關的安裝包
wget http://open***.net/release/open***-2.0.9.tar.gz
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
2、開始安裝
tar zxvf lzo-2.03.tar.gz -C /usr/src/
cd lzo-2.03&& make && make install
tar zxvf open***-2.0.9.tar.gz -C /usr/src/
cd open***-2.0.9 && ./configure &&make && make install
3、配置環境變量以及配置服務器端
cd /usr/src/open***-2.0.9/easy-rsa
此目錄下以許多程序及腳本, 以下爲使用到的程序及腳本說明
vars 腳本, 是用來創建環境變量,設置所需要要的變量的腳本
clean-all 腳本,是創建生成 ca 證書及密鑰文件所需要的文件及目錄 build-ca 腳本, 生成 ca 證書(交互)
build-dh 腳本, 生成 Diffie-Hellman文件(交互)
build-key-server 腳本, 生成服務器端密鑰(交互)
build-key 腳本, 生成客戶端密鑰(交互)
pkitool 腳本, 直接使用 vars 的環境變量設置, 直接生成證書(非交互)
初始化keys 目錄,創建生成ca 證書及密鑰文件所需要的文件和目錄
./clean-all
編輯 vars 文件,生成環境變量, vars 裏的參數根據自己需要改變.
export KEY_SIZE=1024 #生成密鑰的位數
export KEY_COUNTRY=CN #定義所在的國家編碼, 2 個字符
export KEY_PROVINCE=BeiJing #定義所在的省份
export KEY_CITY=BeiJing #定義所在的城市
export KEY_ORG=”*** Test org” #定義所在的組織
export KEY_OU=”*** COM” #定義所在的單位
export KEY_EMAIL=”[email protected]” #定義你的郵件地址
修改好vars 文件後就可以開始生成ca 證書及密鑰文件了!
source ./vars
生成Root Ca證書, 用於簽發Server 和 Client 證書
./build-ca
ls keys
可以看到已經生成了ca.crt ca.key 文件
生成Diffie-Hellman文件
./build_dh
ls -l keys/dh2048.pem
可以看到生成了2048 位的 Diffie-Hellman 文件
生成服務器使用的 *** server Ca證書
./build-key-server server
server是你爲CA 證書起的一個名字, 以 server名字爲例,生成的服務器使用的 CA證書文件爲: server.crt server.key,將生成的CA 證書及密鑰拷貝到/etc/open***下
cp keys/{ca.crt,ca.key,server.crt, server.key, dh2048.pem} /etc/open***/ 3.3 生成客戶端 CA 證書及密鑰
4、 防止惡意***
如果想讓open*** 防止惡意***如DOS、UDP port flooding,生成一個"HMAC firewall", 這個功能可以不啓用,減少麻煩。
/usr/local/sbin/open*** --genkey --secret /usr/src/open***-2.0.9/easy-rsa/keys/ta.key
這個時候,在keys 目錄下,產生一個ta.key,同時也需要在open***.conf 文件裏添加一行
open***.conf
tls-auth /usr/src/open***-2.0.9/easy-rsa/keys/ta.key 0
5、 生成客戶端 CA證書及密鑰使用:build-key 程序即可
./build-key guorui
將在keys 目錄下生成 guorui.crt guorui.csr guorui.key 三個客戶端證書
將ca.crt ca.key guorui.crt guorui.csr guorui.key 五個文件打包,以備客戶端***使用
tar zcvf guorui.***.key.tar.gz keys/{ca.crt ca.key guorui.crt guorui.csr guorui.key}
6、配置服務器端的配置文件
port 2194
proto udp
dev tun
server 10.1.0.0 255.255.255.0
push "route 192.168.100.0 255.255.255.0"
push "dhcp-option DNS 192.168.1.1"
push "dhcp-option DNS 202.96.128.86"
ifconfig-pool-persist /usr/local/etc/ipp.txt
ca /usr/local/etc/keys/ca.crt
cert /usr/local/etc/keys/server.crt
key /usr/local/etc/keys/server.key
dh /usr/local/etc/keys/dh1024.pem
tls-auth /usr/local/etc/keys/ta.key 0
keepalive 10 120
comp-lzo
status /var/log/open***-status.log
log /var/log/open***.log
verb 4
client-to-client
persist-key
persist-tun
啓動open***服務
/usr/local/sbin/open*** --daemon --config /usr/local/etc/server.conf
lsof -i :2194 查看該服務是否正常啓動
7、啓用ip 轉發,並且配置iptables, 實現 NAT功能
如果實現在撥到 *** 上後能夠使用open*** server上網的話, 需要配置NAT 功能, 修改open*** 的管理腳本.在管理腳本的 start 功能裏
添加以下命令(在管理腳本的 119 行)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -j SNAT –to 192.168.100.1
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
8、安裝open***-2.0.1ms1-gui-1.0.3-nonadmin-install.exe
8.1、修改客戶端的配置文件client.conf
client
dev tun
proto udp
remote 192.168.1.1 2194
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server comp-lzo
verb 3
redirect-gateway def1
tls-auth ta.key 1
comp-lzo
nobind
9、測試連接是否成功