Openvpn構(gòu)建線上局域網(wǎng)

前提條件

  • 一條公網(wǎng)ip
  • 局域網(wǎng)內(nèi)部一臺服務(wù)器A
  • 公網(wǎng)綁定到A

局域網(wǎng)架構(gòu)及原理

  • vpn原理:與ssl協(xié)議類似,ssl協(xié)議是將443端口加密,vpn是對client到server整個鏈路加密
  • openvpn原理:使用虛擬網(wǎng)卡技術(shù)声滥,將局域網(wǎng)ip段映射到client端吧趣,在client訪問時局域網(wǎng)內(nèi)機器攔截虛擬網(wǎng)卡數(shù)據(jù)包由server端真實網(wǎng)卡轉(zhuǎn)發(fā)出去,實現(xiàn)client到局域網(wǎng)內(nèi)的訪問


    image.png

Openvpn搭建

參考大佬鏈接陕截,搭建沒有問題,在調(diào)試階段不對 CentOS 7 搭建OpenVPN服務(wù)器_Centos7搭建vpn | abcdocker運維博客 (i4t.com)

1、證書制作

1.1豁遭、安裝制作證書工具
mkdir /data/tools -p  #創(chuàng)建工作目錄
wget -P /data/tools http://down.i4t.com/easy-rsa.zip
unzip -d /usr/local /data/tools/easy-rsa.zip
1.2、修改變量
cd /usr/local/easy-rsa-old-master/easy-rsa/2.0
vim vars
export KEY_COUNTRY="cn"
export KEY_PROVINCE="BJ"
export KEY_CITY="BJ"
export KEY_ORG="abcdocker"
export KEY_EMAIL="cyh@i4t.com"
export KEY_CN=abc
export KEY_NAME=abc
export KEY_OU=abc


#初始化環(huán)境邊看
source vars
./clean-all
 
#注意:執(zhí)行clean-all命令會在當(dāng)前目錄下創(chuàng)建一個名詞為keys的目錄如果存在會刪除內(nèi)容
1.3贺拣、創(chuàng)建根證書
./build-ca
 
# 生成根證書ca.crt和根密鑰ca.key
#因為在vars中填寫了證書的基本信息蓖谢,所以這里一路回車即可
1.4、創(chuàng)建服務(wù)端證書
#為服務(wù)端生成證書和密鑰
#一直回車纵柿,2個Y
 ./build-key-server server

 ....
An optional company name []:
Using configuration from /usr/local/easy-rsa-old-master/easy-rsa/2.0/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'cn'
stateOrProvinceName   :PRINTABLE:'BJ'
localityName          :PRINTABLE:'BJ'
organizationName      :PRINTABLE:'abcdocker'
organizationalUnitName:PRINTABLE:'abc'
commonName            :PRINTABLE:'abc'
name                  :PRINTABLE:'abc'
emailAddress          :IA5STRING:'cyh@i4t.com'
Certificate is to be certified until Jan 31 14:01:35 2030 GMT (3650 days)
Sign the certificate? [y/n]:y
 
 
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
1.5蜈抓、制作client端證書
#每一個登陸的VPN客戶端需要有一個證書,每個證書在同一時刻只能供一個客戶端連接昂儒,下面建立2份
#為客戶端生成證書和密鑰(一路按回車沟使,直到提示需要輸入y/n時,輸入y再按回車渊跋,一共兩次)
./build-key client1
./build-key client2

每一個登陸的VPN客戶端需要有一個證書腊嗡,每個證書在同一時刻只可以一個客戶端連接(可以修改配置文件)

1.6、現(xiàn)在為服務(wù)器生成加密交換時的Diffie-Hellman文件

生成過程比較慢拾酝,在此期間不要去中斷它

./build-dh
# 創(chuàng)建迪菲·赫爾曼密鑰燕少,會生成dh2048.pem文件(生成過程比較慢,在此期間不要去中斷它)
1.7蒿囤、創(chuàng)建完成后證書目錄如下
[root@abc01 2.0]# ll keys
total 84
-rw-r--r-- 1 root root 7997 Feb  3 09:01 01.pem
-rw-r--r-- 1 root root 7880 Feb  3 09:09 02.pem
-rw-r--r-- 1 root root 7997 Feb  3 09:01 abc.crt
-rw-r--r-- 1 root root 1765 Feb  3 09:01 abc.csr
-rw------- 1 root root 3272 Feb  3 09:01 abc.key
-rw-r--r-- 1 root root 2293 Feb  3 09:01 ca.crt
-rw------- 1 root root 3272 Feb  3 09:01 ca.key
-rw-r--r-- 1 root root  424 Feb  3 09:06 dh2048.pem
-rw-r--r-- 1 root root  211 Feb  3 09:09 index.txt
-rw-r--r-- 1 root root   21 Feb  3 09:09 index.txt.attr
-rw-r--r-- 1 root root   21 Feb  3 09:01 index.txt.attr.old
-rw-r--r-- 1 root root  105 Feb  3 09:01 index.txt.old
-rw-r--r-- 1 root root    3 Feb  3 09:09 serial
-rw-r--r-- 1 root root    3 Feb  3 09:01 serial.old
-rw-r--r-- 1 root root 7880 Feb  3 09:09 test.crt
-rw-r--r-- 1 root root 1765 Feb  3 09:09 test.csr
-rw------- 1 root root 3272 Feb  3 09:09 test.key

2客们、openvpn server端安裝配置

2.1、安裝
yum install -y openvpn
2.2、配置服務(wù)端
2.2.1底挫、生成tls-auth key并將其拷貝到證書目錄中
openvpn --genkey --secret ta.key
2.2.2恒傻、證書位置移動
mv ./ta.key /etc/openvpn/keys/
cp /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/{server.crt,server.key,ca.crt,dh2048.pem} /etc/openvpn/keys/

#驗證
[root@k8s-01 ~]# ll /etc/openvpn/keys/
total 24
-rw-r--r-- 1 root root 2342 Feb  3 12:48 ca.crt
-rw-r--r-- 1 root root  424 Feb  3 12:48 dh2048.pem
-rw-r--r-- 1 root root 8089 Feb  3 12:48 server.crt
-rw------- 1 root root 3272 Feb  3 12:48 server.key
-rw------- 1 root root  636 Feb  3 12:47 ta.key
2.2.3、服務(wù)端配置文件
touch /etc/openvpn/server.conf

vim /etc/openvpn/server.conf

port 1194       #openVPN端口
proto tcp       #tcp連接
dev tun         #生成tun0虛擬網(wǎng)卡
 
ca keys/ca.crt      #相關(guān)證書配置路徑(可以修改為全路徑/etc/openvpn/keys)
cert keys/server.crt
key keys/server.key  # This file should be kept secret
dh keys/dh2048.pem
 
server 10..0.0 255.255.255.0   #默認虛擬局域網(wǎng)網(wǎng)段建邓,不要和實際的局域網(wǎng)沖突就可以
ifconfig-pool-persist ipp.txt     
 
push "route 192.168.10.0 255.255.255.0"    #可以通過局域網(wǎng)內(nèi)的ip路由的映射到客戶端
client-to-client                 #如果客戶端都是用一個證書和密鑰連接VPN盈厘,需要打開這個選項
duplicate-cn
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo
 
persist-key
persist-tun
 
status /var/log/openvpn/openvpn-status.log   #狀態(tài)日志路徑,路徑要存在
log-append  /var/log/openvpn/openvpn.log     #運行日志
verb 3                      #調(diào)試信息級別
2.2.4、服務(wù)端啟動
openvpn --daemon --config /etc/openvpn/server.conf  
#如果有問題根據(jù)/var/log/openvpn/ 下的日志排錯官边,一般是不會有問題的

啟動成功會多一個 tun0的虛擬網(wǎng)卡


image.png
2.2.5沸手、client端配置

要導(dǎo)出對應(yīng)的client端key 根證書 ca.crt,client.crt,client.key,ta.key

client
dev tun
proto tcp
remote 192.168.0.10 1194    #openvpn服務(wù)器的外網(wǎng)IP和端口(可以寫多個做到高可用)
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt         #用戶的證書
key client1.key
 
tls-auth ta.key 1
cipher AES-256-CBC
comp-lzo
verb 3
2.2.6、client 鏈接測試

安裝client http://down.i4t.com/openvpn-install-2.4.7-I606-Win10.exe

配置如下


image.png
2.2.7注簿、鏈接問題排錯

如果一直鏈接不上請確認

  • 服務(wù)存活情況
  • 安全組(服務(wù)商提供的)端口是否放開
  • iptables防火墻端口是否放開

我是在安全組卡了很久契吉,這兩只是client 與服務(wù)端鏈接成功,說明我們搭建openvpn已經(jīng)完成了
這時已經(jīng)可以直接登錄到server端滩援;

4栅隐、說明

到這我們搭建openvpn已經(jīng)完成了
這時已經(jīng)可以直接登錄到server端,但是無法登錄局域網(wǎng)內(nèi)的其他機器玩徊,因為server端未開轉(zhuǎn)發(fā)
開轉(zhuǎn)發(fā)還會遇到安全組問題租悄,因此要使用SNAT替換訪問的ip

3、iptables轉(zhuǎn)發(fā)設(shè)置

參考鏈接基礎(chǔ)知識Iptables - 簡書 (jianshu.com)

3.1恩袱、開啟內(nèi)核轉(zhuǎn)發(fā)
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1   #將此行寫入配置文件泣棋,開啟ipv4轉(zhuǎn)發(fā)
sysctl -p     #讀取修改后的配置
3.2、iptables配置
#將客戶端的虛擬ip 10.8.0.0網(wǎng)段的ip替換為局域網(wǎng)內(nèi)服務(wù)端服務(wù)器的ip
iptables -A POSTROUTING -t nat  -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.10.127

Troubleshooting

工具使用tcpdump 監(jiān)聽網(wǎng)卡 參考鏈接 tcpdump詳細教程 - 簡書 (jianshu.com)
#監(jiān)聽tun0網(wǎng)卡上訪問 192.168.10.118數(shù)據(jù)
tcpdump -n -i tun0 host 192.168.10.118

在客戶端ping 畔塔,發(fā)現(xiàn)有去無會潭辈,一看ip都是10.8.x.x 肯定無法過安全組,因此用iptables替換ip澈吨,整個服務(wù)就可用了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末把敢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谅辣,更是在濱河造成了極大的恐慌修赞,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桑阶,死亡現(xiàn)場離奇詭異柏副,居然都是意外死亡,警方通過查閱死者的電腦和手機蚣录,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門割择,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人萎河,你說我怎么就攤上這事荔泳〗侗” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵换可,是天一觀的道長椎椰。 經(jīng)常有香客問我厦幅,道長沾鳄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任确憨,我火速辦了婚禮译荞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘休弃。我一直安慰自己吞歼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布塔猾。 她就那樣靜靜地躺著篙骡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丈甸。 梳的紋絲不亂的頭發(fā)上糯俗,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音睦擂,去河邊找鬼得湘。 笑死,一個胖子當(dāng)著我的面吹牛顿仇,可吹牛的內(nèi)容都是我干的淘正。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼臼闻,長吁一口氣:“原來是場噩夢啊……” “哼鸿吆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起述呐,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惩淳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后市埋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黎泣,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年缤谎,在試婚紗的時候發(fā)現(xiàn)自己被綠了抒倚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡坷澡,死狀恐怖托呕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤项郊,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布馅扣,位于F島的核電站,受9級特大地震影響着降,放射性物質(zhì)發(fā)生泄漏差油。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一任洞、第九天 我趴在偏房一處隱蔽的房頂上張望蓄喇。 院中可真熱鬧,春花似錦交掏、人聲如沸妆偏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钱骂。三九已至,卻和暖如春挪鹏,著一層夾襖步出監(jiān)牢的瞬間见秽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工狰住, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留张吉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓催植,卻偏偏與公主長得像肮蛹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子创南,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容