由於國家GW防火牆對***的管控,不能直接通過國內與香港建立***,如果反過來,通過open***從香港主動連接國內,就可以實現,親測,速度和穩定性非常OK;
1、 Open***優勢
1. 配置靈活,可以應付各種複雜網絡環境,比如點對點,或者網對網;
2. 實用性非常強,尤其是在當下國家GW干擾***的大環境下,open***可以非常穩定打通國內外網絡,實現互聯互通,而且效果非常明顯,非常穩定;
3. 成本價格低,是性價比非常高的***方案,其性能並不亞於硬件設備,只需要一臺穩定的PC電腦,或者雲主機上部署,尤其適合於中小企業;
4. 支持移動辦公,也可以使用於手機等移動終端設備;
2、 網絡拓撲圖
3、 實驗目的
通過Open***來實現172.16.20.0/24網絡與服務器網絡B(10.99.0.0/24)的網絡互聯,可用於解決國外網絡延遲問題。
4、 環境說明
準備兩臺服務器,這裏分別是兩臺雲主機,網絡在供應商哪裏是經過優化的,到大陸非常穩定,延遲,見圖,即深圳***服務器和香港***服務器;
深圳***服務器作爲***服務器,香港***服務器作爲深圳***服務器的客戶端;而客戶端網絡A所在的網絡的PC機作爲香港***服務器的客戶端;客戶端網絡A撥入香港***服務器,香港***服務器以客戶端的身份再撥入深圳***服務器,從而打通了客戶端網絡A的pc機訪問深圳***服務器所在的服務器網絡B,即 172.16.20.0/24訪問10.99.0.0/24
深圳***服務器
eth0接口IP:10.99.0.12(此直連物理網絡,非***虛擬網絡) ***虛擬IP:172.16.10.0/24 外網IP(略)
香港***服務器
eth0接口IP:10.0.0.5 ***虛擬IP: 172.16.20.0/24 外網IP(略)
撥入深圳***服務器的客戶端Common Name是xgserver
注: 深圳/香港***服務器 都是 雲主機服務器;
對比拓撲圖和IP地址信息,得出最終的目的是要實現:
172.16.20.0/24 網絡與10.99.0.0/24 互聯互通;
也許你會奇怪,爲什麼不是客戶端網絡A與服務器網絡B的互聯互通? 其實這裏關係並不大, 172.16.20.0/24與10.99.0.0/24 能通,AB網絡的互通就不難了,關鍵是我們要理解其中的邏輯;
5、 軟件安裝
yum install gcc* openssl-devel net-tools lzo-devel pam-devel –y mkdir /usr/local/open*** tar –zxvf open***-2.4.2.tar.gz cd open***-2.4.2 ./configure –prefix=/usr/local/open*** Make Make install
6、 配置easyrsa
pen***-2.3.8及以上版本,不包含easy-rsa,需要單獨下載:
git clone https://github.com/Open***/easy-rsa mkdir /etc/open***/server cp –r easy-rsa /etc/open***/server cd /etc/open***/server/easy-rsa/easyrsa3 cp vars.example vars vi vars #編輯vars,定位到如下配置位置,修改如下 set_var EASYRSA_REQ_COUNTRY "CN" set_var EASYRSA_REQ_PROVINCE "GUANGDONG" set_var EASYRSA_REQ_CITY "SHENZHEN" set_var EASYRSA_REQ_ORG "HUANAN" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "mycompany"
保存,退出
7、 創建服務器證書及key
cp –R /so ftware/easy-rsa /etc/open***/server #拷貝easy-rsa目錄到此目錄 cd /etc/open***/server/easy-rsa/easyrsa3 #定位到目錄,此目錄 ./easyrsa init-pki #初始化Pki ./easyrsa build-ca #創建根證書 …………. Enter PEM pass phrase: #輸入根證書密碼,用於後續證書創建 Verifying - Enter PEM pass phrase: #重複輸入,確認密碼 ………….. ./easyrsa gen-req server nopass #創建服務端書 ./easyrsa sign server server #簽約服務器端證書,提示輸入密碼,先輸入前面的根證書密碼,第二個密碼爲服務器密碼; ./easyrsa gen-dh #創建Diffie-Hellman,確保key穿越不安全網絡
8、 創建客戶端證書
mkdir /etc/open***/client #創建客戶端目錄,用於存放客戶端證書和easy-rsa cp –r /software/easy-esa /etc/open***/client cd /etc/open***/client/easy-rsa/easyrsa3 ./easyrsa init-pki #初始化 ./easyrsa gen-req sgserver 注:後面提示的密碼,設置之後必須記住,配置windows/linux客戶端連接的時候,需要用到; cd /etc/open***/server/easy-rsa/easyrsa3 #定位到服務器的easy-rsa目錄 ./easyrsa import-req /etc/open***/client/easy-rsa/easyrsa3/pki/reqs/xgserver.req xgserver #此req文件,是上圖中倒數第二行的目錄,導入並簽約證書 ./easyrsa sign client xgserver #提示輸入根證書的密碼,即最開始創建根證書時設置的密碼
9、 服務器和客戶端生成的文件
服務器端文件:
/etc/open***/server/easy-rsa/easyrsa3/pki/ca.crt /etc/open***/server/easy-rsa/easyrsa3/pki/dh.pem /etc/open***/server/easy-rsa/easyrsa3/pki/issued/server.crt /etc/open***/server/easy-rsa/easyrsa3/pki/issued/xgserver.crt /etc/open***/server/easy-rsa/easyrsa3/pki/private/ca.key /etc/open***/server/easy-rsa/easyrsa3/pki/private/server.key /etc/open***/server/easy-rsa/easyrsa3/pki/reqs/server.req /etc/open***/server/easy-rsa/easyrsa3/pki/reqs/xgserver.req
客戶端文件:
/etc/open***/client/easy-rsa/easyrsa3/pki/private/xgserver.key /etc/open***/client/easy-rsa/easyrsa3/pki/reqs/xgserver.req
10、 複製文件
拷貝服務器密鑰及證書等到open***目錄
cp /etc/open***/server/easy-rsa/easyrsa3/pki/ca.crt /etc/open***/server cp /etc/open***/server/easy-rsa/easyrsa3/pki/dh.pem /etc/open***/server cp /etc/open***/server/easy-rsa/easyrsa3/pki/issued/server.crt /etc/open***/server cp /etc/open***/server/easy-rsa/easyrsa3/pki/private/server.key /etc/open***/server
拷貝客戶端密鑰及證書等到client目錄
/etc/open***/client/easy-rsa/easyrsa3/pki/private/xgserver.key /etc/open***/server/easy-rsa/easyrsa3/pki/ca.crt /etc/open***/server/easy-rsa/easyrsa3/pki/issued/xgserver.crt
客戶端文件通常需要拷貝到客戶端,比如windows
注: 以上所有配置,可以深圳和香港***服務器,基本一樣,只是要注意客戶端Common Name要保持不一樣,以免混淆。
11、 服務器配置
深圳服務器與香港服務器配置上有些區別,
進到open***的解壓目錄:
cd open***-2.4.2 /sample/sample-config-files cp server.conf /etc/open*** #兩臺服務器都需要複製
深圳***服務器配置:
vi server.conf #修改服務器端配置文件
management 127.0.0.1 1196 #管理接口 port 1195 #監聽端口 proto udp #使用UDP封裝協議 dev tun #tun設備 ca /etc/open***/server/ca.crt #指定根證書 cert /etc/open***/server/server.crt #指定服務器證書 key /etc/open***/server/server.key #指定服務器密鑰 dh /etc/open***/server/dh.pem #DH server 172.16.10.0 255.255.255.0 #***客戶端IP ifconfig-pool-persist ipp.txt push "route 10.99.0.0 255.255.255.0" #推送路由給客戶端 client-config-dir /etc/open***/ccd #指定定製化客戶端的目錄,用於控制客戶端的權限 route 172.16.20.0 255.255.255.0 #在本機open***服務器上添加系統路由 client-to-client #允許客戶端互訪,默認只能客戶端訪問***服務器 keepalive 10 120 cipher AES-128-CBC #加密協議 comp-lzo persist-key persist-tun status open***-status.log log open***.log log-append open***.log verb 3
配置ccd,控制xgserver客戶端配置
mkdir /etc/open***/ccd vi xgserver #文件名必須跟客戶端的Common Name相同,前文說過,這個客戶端是安裝在香港***服務器上,用於撥入深圳***服務器的,而連通香港和深圳網絡;
添加如下內容:
ifconfig-push 172.16.10.250 172.16.10.249 #推送給客戶端的IP地址; iroute 172.16.20.0 255.255.255.0 #添加open***的路由,這裏操作系統路由不同
注: 且看route 172.16.20.0 255.255.255.0 和 iroute 172.16.20.0 255.255.255.0,這兩者之間有什麼區別呢,爲什麼要同時配置呢?
答: 這兩個參數非常重要,是***兩端的網絡互聯的關鍵;route和iroute參數,在這裏分別控制着不同的路由,route是控制系統路由的,即給操作系統添加路由;iroute是控制系統路由之外的Open***內部路由,其本質是告訴open***通過對等方創建一條內部open***路由到達對端網絡,每個客戶端所在的網絡並不相同,所以,這是每個客戶端的配置;這就是open***的網對網的靈活之處,維護和定位每個客戶端所在子網以及所連接的子網,可以任意控制客戶端所在的子網訪問或者不能互訪,隨意控制虛擬網絡的終點和起點;
如何查看open***的內部路由呢?
在服務器上,打開Open***的管理端口,即management控制的參數;
telnet 127.0.0.1 1196
進入之後,再輸入status,看如下:
香港***服務器配置:
local 10.0.0.5 management 127.0.0.1 1196 port 1195 proto udp dev tun ca /etc/open***/server/ca.crt cert /etc/open***/server/server.crt key /etc/open***/server/server.key dh /etc/open***/server/dh.pem server 172.16.20.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 10.99.0.0 255.255.255.0" push "route 172.16.10.0 255.255.255.0" client-to-client keepalive 10 120 cipher AES-128-CBC comp-lzo persist-key persist-tun status open***-status.log log open***.log log-append open***.log verb 3
12、 開啓路由轉發
vim /etc/sysctl.conf net.ipv4.ip_forward = 0 改成 net.ipv4.ip_forward = 1
13、 iptables配置
/sbin/iptables -t nat -I POSTROUTING -s 172.16.20.0/255.255.255.0 -o ens33 -j MASQUERADE #對於來源爲***虛擬IP訪問配置未指定的網絡時,通過物理網口eth0的nat轉發出去,通常是公網網絡 iptables -I FORWARD 1 -j ACCEPT #默認轉發是禁止的,允許轉發;這條很重要,網上太多資料都沒有這一條,不是本機的網絡,要允許防火牆轉發;
注:配置了以上策略,要記得保存iptables-save
14、 啓動open***服務
深圳***服務器:
/usr/local/open***/sbin/open*** --config /etc/open***/server/server.conf &
香港***服務器:
/usr/local/open***/sbin/open*** --config /etc/open***/server/server.conf &
啓動客戶端(linux系統,在香港***服務器上)
Linux下,客戶端的安裝方法,跟服務器端安裝方法,不過,客戶端不需要配置easy-rsa;
mkdir /etc/open***/szconnection cp /software/open***-2.4.2/sample/sample-config-files/client.conf /etc/open***/szconncection/ #從open***源碼包中,拷貝客戶端配置文件;
把xgserver這個客戶端的證書密鑰 以及根證書拷貝這個目錄(具體文件,請參照 10、 複製文件的客戶端證書和密鑰所提到的三個文件,通過一些方法(比如scp)拷貝/etc/open***/szconncection/目錄),最終目錄如下:
配置文件內容如下:
client dev tun proto udp remote 211.154.139.8 1094 resolv-retry infinite nobind persist-key persist-tun ca /etc/open***/szconnection/ca.crt cert /etc/open***/szconnection/xgserver.crt key /etc/open***/szconnection/xgserver.key remote-cert-tls server cipher AES-256-CBC comp-lzo verb 3
保存
啓動
/usr/local/open***/sbin/open*** --config /etc/open***/szconnection/client.conf &
注: 這裏啓動 通常需要輸入密碼,linux無法保存此密碼,下面提供了一個腳本可以保存密碼,供參考;
腳本內容:
#!/usr/bin/expect set timeout 30 spawn /usr/local/open***/sbin/open*** --config /etc/open***/szconnection/client.conf expect "Password:" { send "WIN2net\r" } expect eof
注: 需要先安裝expect
15、 客戶端安裝
客戶端的安裝,非常簡單,可以自行百度,也可以參考其他博客;
16、 測試
從客戶端網絡A中,任意一臺PC安裝***客戶端,ping服務器網絡B網段,在服務器網絡B中,有一臺windows服務器,其IP是10.99.0.10;
先在windows服務器,添加路由:
route add –p 172.16.20.0 mask 255.255.255.0 10.99.0.12
然後從客戶端網絡A中,ping 10.99.0.10