open***部署

  

***的分類:

PPTP ***:小區寬帶,家庭路由器會有連接不上的情況。

IPsec ***:主要開源軟件有openswan,適用於點對點網絡,比如公司總部和分部。

open ***:主要適用出差辦公連接公司內部網絡,以及跨機房連接,遠程維護。

 ---------------------------------------------------------------------------------------------------------------------------------------
 

Open***部署:

open*** yum安裝:
1.關閉防火牆和selinux

chkconfig iptables off
/etc/init.d/iptables stop


2.配置時間同步:

ntpdate pool.ntp.org
echo '*/5 * * * *  /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1' >>/var/spool/cron/root


3.開啓內核轉發

sed -i 's/ net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

4.更改yum源:

rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

5.安裝open***

yum install open*** -y
yum install easy-rsa -y

6.備份配置文件:

cp server.conf server.conf.bak

vi /etc/open***/server.conf

local 10.86.10.18     
port 1194           
proto tcp           
dev tun            
ca /etc/open***/keys/ca.crt            
cert /etc/open***/keys/server.crt                          
key /etc/open***/keys/server.key    
dh /etc/open***/keys/dh2048.pem     #注意2.3版本以後是2048.pem不再是1024.pem
server 10.8.0.0 255.255.255.0
push "route 192.168.100.0 255.255.255.0"
client-to-client
duplicate-cn
keepalive 10 120 
comp-lzo
max-clients 100
persist-key
persist-tun
tls-auth ta.key 0           #開啓TLS,使用ta.key防禦***。服務器端的第二個參數值爲0,客戶端的爲1。
status open***-status.log
log /var/log/open***.log
verb 3


7.創建CA、服務器key、客戶端key

cd /usr/share/easy-rsa/2.0/
cp vars vars.bak

vi vars     #找到以下改成這樣既可

export KEY_COUNTRY="CN"
export KEY_PROVINCE="ShanDong"
export KEY_CITY="QingDao"
export KEY_ORG="Darren"
export KEY_EMAIL="[email protected]"
export KEY_OU="darren-unit"
source vars
./clean-all

創建ca:

 
./build-ca   #一路回車既可

創建server:

./build-key-server server

創建客戶端test:

./build-key test

創建dh:

./build-dh

創建防ddos***:

open*** --genkey --secret keys/ta.key


拷貝key到服務端和客戶端:

cp -ap keys/ /etc/open***/

客戶端配置:

#####################
client
dev tun
proto tcp
remote 192.168.1.115 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert test.crt
key test.key
tls-auth ta.key 1
ns-cert-type server
comp-lzo
verb 3
#########################################


open*** 源碼安裝: 

實驗環境:

open*** server:eth0  10.86.10.18   eth1 10.1.1.18

配置時間同步:

echo '*/5 * * ** /usr/sbin/ntpdate pool.ntp.org' >>/var/spool/cron/root

開啓內核轉發功能:

net.ipv4.ip_forward= 1

安裝open***所需要的插件:

yum install -y lzo lzo-devel pam pam-devel

安裝open***軟件:

mkdir -p /home/darren/toolshttp://swupdate.open***.org/community/releases/open***-2.2.2.tar.gz 
cd /home/darren/tools/
tar zxf open***-2.2.2.tar.gz
./configure --with-lzo-headers=/usr/local/include/  --with-lzo-lib=/usr/local/lib
make
make install

#如果出錯,則安裝:
yum install openssl openssl-devel       #安裝依賴包


配置open*** server建立CA證書:

服務端和客戶端共用一個CA證書,客戶端有自己的祕鑰,服務端也有自己的祕鑰。後面會生成服務端和客戶端的祕鑰。此處是生成公共的CA證書。

cd /home/darren/tools/
cd open***-2.2.2/easy-rsa/2.0/
cp vars vars.bak

----------------------- 

vi vars
export KEY_COUNTRY="CN"
exportKEY_PROVINCE="shandong"
exportKEY_CITY="qingdao"
exportKEY_ORG="darren"
exportKEY_EMAIL="[email protected]"
[email protected]
exportKEY_CN=CN
exportKEY_NAME=darren
exportKEY_OU=darren
exportPKCS11_MODULE_PATH=changeme
exportPKCS11_PIN=1234
--------------

source vars   #使上面的配置文件生效

./clean-all    #此命令會刪除2.0下的keys

重新建立證書:

./build-ca   #生成新的ca證書的命令,一路回車即可。

生成服務端證書和祕鑰key文件:

./build-key-serverserver  #生成服務端祕鑰的命令,一路回車。


生成客戶端證書和祕鑰key文件:

open***中,每一個登錄open***的客戶端都要生成一個client證書和key文件,每個證書在同一時刻只允許一個客戶端連接,若建立多個客戶端證書,則重複執行如下步驟即可

./build-key cuijie    #生成客戶端祕鑰的命令,如果想要客戶端連接時需要密碼,則用./build-key-pass cuijie 代替,同樣一路回車即可。

生成一個帶密碼的客戶端:

./build-key-pass  cuijie   
EnterPEM pass phrase:      #此處的密碼就是客戶端連接***時需要輸入的密碼,其餘一路回車即可。

生成傳輸進行祕鑰交換時用到的交換祕鑰協議文件:

./build-dh    #時間較長,不可強行停止。

生成一個防火牆的文件(爲防止惡意***,如DOSUDP

open*** --genkey  --secret keys/ta.key

服務端*** server.conf重要參數:

拷貝keys及配置文件:

mkdir /etc/open***
cd /home/darren/tools/
cd open***-2.2.2/easy-rsa/2.0/
cp -ap  keys/ /etc/open***/     #拷貝所有的keys
cd  ../../sample-config-files/
cp client.conf server.conf /etc/open***/

編輯配置文件:

vi  /etc/open***/server.conf

local  10.86.10.18     #本地監聽的地址,一般爲eth0網卡IP地址。
port  1194         #默認端口號,改成別的更安全。
proto tcp          #默認使用udp協議,生產中建議改爲tcp協議。
dev  tun            #採用路由的模式,可選tap或tun,這裏設爲默認。
ca   keys/ca.crt   #公共的ca證書,keys要和server.conf在一個目錄下。
cert keys/server.crt         #這裏使用全局路徑,不然啓動時總是自動退出。
key keys/server.key    
dh keys/dh2048.pem
server 10.8.0.0 255.255.255.0   #這是server分配給client的虛擬地址池,不能與其他網段衝突。
push  "route 192.168.100.0 255.255.255.0"    #此處設爲server內網網段,能夠確保客戶端和***所在內網網段通信。
client-to-client     #允許撥號的多個client之間相互通信
duplicate-cn       #允許多個客戶端使用同一賬號連接。
keepalive10 120     #每10秒ping一次,120秒未收到則斷開連接。
comp-lzo         #開啓壓縮功能
max-clients100      #設置最大允許的client數量,默認是不限制。
persist-key       #***超時後,當重啓***時,保持上一次使用的私鑰,而不需重新讀取私鑰。
persist-tun       #如果連接超時,重新啓動後,保持tun設備自動連接狀態。
status  open***-status.log
log      open***.log  #日誌文件。
verb  3          #指定日誌文件冗餘。

啓動open***

/usr/local/sbin/open*** --config /etc/open***/server.conf &  
echo '/usr/local/sbin/open*** --config /etc/open***/server.conf &' >>/etc/rc.local

錯誤:啓動時總是自動退出:然後在相對路徑下去沒有問題。
我第一懷疑的是 配置文件證書和祕鑰的路徑問題,果然改成全局路徑就好了。

或者

cd /home/darren/tools/
cp open***-2.2.2/sample-scripts/open***.init/etc/init.d/open***
chmod 755  /etc/init.d/open***
chkconfig --add open***
chkconfig open*** on
/etc/init.d/open***  start

 

window安裝open***軟件:

下載windows客戶端軟件然後安裝:

https://open***.net/index.php/open-source/downloads.html

下載server端證書和祕鑰:

ca.crt   test.key  test.crt

 

拷貝下載的祕鑰文件到安裝open***config目錄下:

C:\ProgramFiles\Open***\config

 

config新建一個文件,命令爲test.o***(注意文件的擴展名不能有其他的)

client
dev tun
proto tcp
remote 10.86.10.18 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert test.crt
key test.key
ns-cert-type server
comp-lzo
verb 3

window右下角點擊connect,成功!

注意:一不小心碰到許多大坑,一定要細心耐心排查。安裝open***時,要選擇對應的版本下載,windows打開軟件時要右鍵以管理員身份運行,不然後報錯。push路由的時候,一定要檢查是否爲***server內網的網段。再就是網關不能有多個,可以添加默認路由,但一般不要這麼做。遇到問題時,一定要思路清晰,冷靜下來看日誌,日誌中出錯的部分可以google大部分問題自己都能解決,不要問別人,靠別人永遠不如靠自己來的可靠。

 

解決客戶端ping不通服務端所在的內網段地址:

1)更改所有和open*** server同一局域網的網關,網關改爲open***的內網ip地址(此種不太現實)route add default gw 10.1.1.18
2)添加一個網段路由(所有內網服務器都需要添加,也不太現實):route add –net 10.8.0.0/24 gw 10.1.1.18
3)nat方式把10.8.0.0的網段轉換爲10.1.1.0網段:iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j SNAT --to-source 10.1.1.18


客戶端增加證書:

爲每一個client增加證書:

cd /home/darren/tools/
cd open***-2.2.2/easy-rsa/2.0/
source vars
./build-key-passclient……N
注意:此處不要執行./clean-all

客戶端吊銷證書:

吊銷單個證書:

cd /home/darren/tools/
cdopen***-2.2.2/easy-rsa/2.0/
sourcevars
viopenssl-1.0.0.cnf  #新版本不用管,舊版本需要註釋後7行。
./revoke-fulltest    #吊銷用戶test證書
llkeys/crl.pem      #查看吊銷的證書
catkeys/index.txt   #查看吊銷的結果
cpkeys/crl.pem /etc/open***/keys/   #拷貝吊銷的證書到配置文件目錄下
echo ‘crl-verify   /etc/open***/keys/crl.pem’>>/etc/open***/server.conf   #把吊銷的證書路徑放到配置文件中。  
#重啓生效!

吊銷多個證書:

#重複以上步驟即可,覆蓋式類型。


 

Linux版客戶端安裝:

和服務端安裝步驟一樣,配置如下:

mkdir –p/etc/open***/
vi /etc/open***/client.conf
client
devtun
prototcp
remote10.86.10.18 1194
resolv-retryinfinite
nobind
persist-key
persist-tun
ca  /etc/open***/keys/ca.crt              #注意,客戶端此處要接全路徑
cert  /etc/open***/keys/test.crt
key /etc/open***/keys/test.key    
ns-cert-typeserver
comp-lzo
verb 3

拷貝證書:

cp ca.crt test.key test.crt  /etc/open***/

啓動client

/usr/local/sbin/open***--config /etc/open***/client.conf &  
echo '/usr/local/sbin/open***--config /etc/open***/client.conf &' >>/etc/rc.local

或者:

cd /home/darren/tools/
cp open***-2.2.2/sample-scripts/open***.init/etc/init.d/open***
chmod755 /etc/init.d/open***
chkconfig–add open***
chkconfigopen*** on
/etc/init.d/open***start

########################################################################

#############################open *** 結束###############################

########################################################################

 

 open***跨機房連接:

要求兩端所在的內網相互之間ping通。  
       A--------------->client   .............................server <----------------B
 

1.兩端內網不能在相同的網段:A: 172.16.10.10  , B :192.168.10.10
2.編輯配置文件,增加一行:echo 'client-config-dir /etc/open***/ccd' >>/etc/open***/server.conf
3.找到open***客戶端的key名字,test.key 把客戶端內網的網段加入到test中:
echo 'iroute 172.16.10.0 255.255.255.0 ' >/etc/open***/test
4.在open*** server.conf中添加一條路由:
echo 'route 172.16.10.0 255.255.255.0' >>/etc/open***/server.conf
5.確保open*** server.conf中打開以下兩項:
client-to-client
push "route 172.16.10.0 255.255.255.0"   #此處有疑問,感覺應該是服務端所在內網的路由。
6.在open*** server.conf中需要註釋一行:
#duplicate-cn 


這樣就實現了客戶端內網和服務端內網相互之間可以訪問。
----------------------------------------------------------------------------------


 
open***代理訪問:

配置***通過服務器代理出網實踐:
和之前的server.conf配置相比,需要增加的內容:

push "redirect-gateway def1 bypass-dhcp bypass-dns"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

添加一條nat映射:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

這樣訪問網站走的就是***線路。
 ----------------------------------------------------------------------------------------------------------------------------

 

 open***負載均衡和高可用:
 
1) 首先需要把服務器端keys拷貝到另一臺機器上,然後再將客戶端本地的xxx.o***複製一份,可以命令爲xxx-1.o***、xxx-2.o***,這兩個配置文件需要指定不同的server ip地址。(服務端server.conf中也需要修改ip地址)
注意:如果服務起不來可以嘗試用全局路徑: 
/usr/local/sbin/open*** --config /etc/open***/server.conf & 如果還不行,把所有open***的服務kill。

2) 首先拷貝服務端keys到另一臺機器上,然後修改客戶端的配置文件:
編輯tracy.o***,添加如下內容:

remote 10.86.10.11 1194
remote 10.86.10.13 1194
remote 10.86.10.14 1194
remote-random          #輪詢連接
resolv-retry 60         #60秒重試一次。

 
 

 open***通過用戶名和密碼登陸:

編輯配置文件server.conf添加如下3行:

auth-user-pass-verify  /etc/open***/checkpsw.sh via-env          #認證用戶通過腳本
client-cert-not-required                      #不使用客戶端證書,用戶名和密碼驗證
username-as-common-name           #使用客戶端的name做爲common name

獲取checkpsw.sh腳本:

cd /etc/open*** 
wget http://open***.se/files/other/checkpsw.sh
vi checkpsw.sh
 #!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@open***.se>
#
# This script will authenticate Open*** users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.
 
PASSFILE="/etc/open***/psw-file"
LOG_FILE="/var/log/open***-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
 
###########################################################
 
if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
  exit 1
fi
 
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
 
if [ "${CORRECT_PASSWORD}" = "" ]; then
  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
  exit 1
fi
 
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
  exit 0
fi
 
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1

---------------------------------------------------------------- 

chmod +x checkpsw.sh

 
創建密碼文件:

 
vi psw-file

darren     darren123
test       test123

 

在客戶端註釋證書相關的配置,添加如下:

auth-user-pass

完整版客戶端配置:

client
dev tun
proto tcp
remote 10.86.10.14 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/open***/keys/ca.crt
#cert /etc/open***/keys/tracy.crt         #去掉此項
#key /etc/open***/keys/tracy.key        #去掉此項
ns-cert-type server
comp-lzo
verb 3
auth-user-pass


open*** 2.2.2故障:客戶端總是彈出用戶名和密碼。
解決:在服務端配置文件中添加:--script-security 3

--------------------------------------------------------------------------------
記錄一次排錯思路:電腦連接***以後,能訪問*** server的內網段,但不能訪問外網段。
解決:首先想到的是push 路由的問題,驗證發現已經push了內網段的路由,外網段不push,client就無法訪問外網段。如果push的路由不正確也會出現無法訪問外網段的問題。比如外網段是10.86.10.0/23,而push的卻是10.86.10./24. 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章