轉載:
open***簡介
open***有兩種模式:一種網橋模式,一種路由模式。open***提供兩種類型的虛擬網絡接口,TUN和TAP, tun用於建立ip隧道,tap用於建立以太網橋,兩種模式我們成爲路由模式和網橋模式。
橋接模式相當於建立一條二層通道,優點是廣播可以穿透***,允許依賴局域網廣播的軟件運行,橋接不需要配置路由,可以和以太網任何協議工作,客戶端連接***被分配一個遠端物理以太網的ip地址,從而和遠端子網的其他機器進行通信,就像連接在本地一樣。缺點是效率比路由模式要低,並且不容易擴展。
路由模式相當於建立一條三層通道,優點是效率高可擴展,可以更好的調節MTU。缺點是廣播不能穿越***,僅支持ipv4,如果使用橋接模式,C/S兩端必須是tap,如果使用路由模式C/S兩端可以是tun也可以是tap,但兩端必須一致。
一、依賴環境配置安裝
open***主要依賴以下軟件環境:
gcc g++【gcc g++爲系統需要的編譯工具】 一般linux環境中已經預安裝了此環境。
lzo庫 [Lzo庫的功能壓縮數據,加快通訊速度]
openssl [囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協議]
二、安裝前準備
#關閉selinux防火牆(默認已經關閉)
setenforce 0
sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
#安裝openssl和lzo,lzo用於壓縮通訊數據加快傳輸速度
yum -y install openssl openssl-devel
yum -y install lzo
#安裝epel源
rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
三、安裝並配置open***和easy-rsa
#安裝open***和easy-rsa
yum -y install open*** easy-rsa
# 修改vars文件
cd /usr/share/easy-rsa/2.0/
vim vars
# 修改註冊信息,比如公司地址、公司名稱、部門名稱等。
export KEY_COUNTRY="CN"
export KEY_PROVINCE="Shandong"
export KEY_CITY="Qingdao"
export KEY_ORG="MyOrganization"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"
# 初始化環境變量
source vars
# 清除keys目錄下所有與證書相關的文件
# 下面步驟生成的證書和密鑰都在/usr/share/easy-rsa/2.0/keys目錄裏
./clean-all
# 生成根證書ca.crt和根密鑰ca.key(一路按回車即可)
./build-ca
# 爲服務端生成證書和密鑰(一路按回車,直到提示需要輸入y/n時,輸入y再按回車,一共兩次)
./build-key-server server
# 每一個登陸的×××客戶端需要有一個證書,每個證書在同一時刻只能供一個客戶端連接,下面建立2份
# 爲客戶端生成證書和密鑰(一路按回車,直到提示需要輸入y/n時,輸入y再按回車,一共兩次)
./build-key client1
./build-key client2
# 創建迪菲·赫爾曼密鑰,會生成dh2048.pem文件(生成過程比較慢,在此期間不要去中斷它)
./build-dh
# 生成ta.key文件(防DDos***、UDP淹沒等惡意***)
open*** --genkey --secret keys/ta.key
查看keys目錄下生成的文件:
四、創建服務器端配置文件
# 在open***的配置目錄下新建一個keys目錄
mkdir /etc/open***/keys
# 將需要用到的open***證書和密鑰複製一份到剛創建好的keys目錄中
cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/open***/keys/
# 複製一份服務器端配置文件模板server.conf到/etc/open***/
cp /usr/share/doc/open***-2.3.2/sample/sample-config-files/server.conf /etc/open***/
# 查看server.conf裏的配置參數
grep '^[^#;]' /etc/open***/server.conf
# 編輯server.conf
vim /etc/open***/server.conf
port 1194 #open***監聽端口
proto tcp # 改成tcp,默認使用udp,如果使用HTTP Proxy,必須使用tcp協議。如果服務器在國外(通信質量不佳),建立使用udp,tcp的面向連接可能造成丟包。
dev tun
ca keys/ca.crt # 路徑前面加keys,全路徑爲/etc/open***/keys/ca.crt
cert keys/server.crt
key keys/server.key # 服務器私鑰
dh keys/dh2048.pem #dh公鑰算法
server 10.8.0.0 255.255.255.0 # 默認虛擬局域網網段,不要和實際的局域網衝突即可
ifconfig-pool-persist ipp.txt #防止open***重啓後忘記client端曾經使用過的ip地址
push "route 10.0.0.0 255.0.0.0" #爲客戶端推送一條路由
client-to-client # 可以讓客戶端之間相互訪問直接通過open***程序轉發,根據需要設置
duplicate-cn # 如果客戶端都使用相同的證書和密鑰連接×××,一定要打開這個選項,否則每個證書只允許一個人連接×××
keepalive 10 120 #Nat後面使用***,如果長時間不通信,NAT session可能會失效,導致***連接丟失。所以keepalive提供類似ping的機制,每10秒通過***的control通道ping對方。如果120秒內無法ping通,則認爲丟失,並重啓***,重新連接。
tls-auth keys/ta.key 0 # This file is secret
comp-lzo #對數據進行壓縮,注意和client端一致
persist-key #通過keeplive檢測超時後,重啓***,不重新讀取key,保留第一次使用的key
persist-tun #通過keeplive檢測超時後,重啓***,一致保持tun或者tap設備是linkup的,否則網絡連接會linkdown然後linkup
status open***-status.log # Open×××的狀態日誌,默認爲/etc/open***/open***-status.log
log-append open***.log # Open×××的運行日誌,默認爲/etc/open***/open***.log
verb 5 # 日誌記錄級別,改成verb 5可以多查看一些調試信息
cipher AES-256-CBC #指定數據對稱加密算法
五、配置內核和防火牆,啓動服務
# 開啓路由轉發功能
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sysctl -p
# 配置防火牆,別忘記保存
iptables -I INPUT -p tcp --dport 1194 -m comment --comment "open***" -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
service iptables save
# 啓動open***並設置爲開機啓動
service open*** start 如果重啓存在問題,可以再open***.log文件夾中查看原因。
chkconfig open*** on
六、創建客戶端配置文件
# 複製一份client.conf模板命名爲client.o***
cp /usr/share/doc/open***-2.3.2/sample/sample-config-files/client.conf client.o***
# 編輯client.o***
vim client.o***
client
dev tun
# 改爲tcp
proto tcp
# Open×××服務器的外網IP和端口
remote 203.195.xxx.xxx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
# client1的證書
cert client1.crt
# client1的密鑰
key client1.key
ns-cert-type server
# 去掉前面的註釋
tls-auth ta.key 1
comp-lzo
verb 3
#數據加密算法,和服務器的加密算法必須匹配。
cipher AES-256-CBC
配置完成,將client.o***文件將ca.crt、client1.crt和client1.key放在同一個文件夾下。
linxu系統版本CentOS6.8。本配置的linux認證方法爲證書認證,及不需要輸入用戶名密碼,只有證書正確即可認證成功。