1. 程式人生 > >樹莓派搭建Openvpn(一)

樹莓派搭建Openvpn(一)

使用Openvpn的原因有幾個:
1. 安全:連線公共無線網路很容易暴露自己的敏感資料
2. 翻牆:我司遮蔽QQ,知乎,視訊網站…
3. 裝逼:買了樹莓派,就要用起來啊
4. 學習:Linux,計算機網路,網路安全

1.安裝Openvpn

apt-get install openvpn

2.下載easy-rsa

cd /etc/openvpn
wget --no-check-certificate https://github.com/OpenVPN/easy-rsa/releases/download/2.2.2/EasyRSA-2.2.2.tgz
tar -xzvf EasyRSA-
2.2.2.tgz mv EasyRSA-2.2.2 easy-rsa

3.配置easy-rsa

cd /etc/openvpn/easy-rsa
nano vars    # 開啟easy-rsa配置檔案

a. 編輯金鑰儲存路徑

export EASY_RSA="/etc/openvpn/easy-rsa"

b. 編輯dh金鑰大小

export KEY_SIZE=1024 #預設的2048太大,要運算很久

c. 載入配置

source ./vars

4.生成金鑰
a. 生成ca金鑰

./clean-all      # 先清空所有金鑰
./build-ca     

所有輸入取預設值就可以了,直接回車;keys資料夾下多了ca.crt ca.key

b. 生成伺服器金鑰

./build-key-server server   # 引數為伺服器名字

接下來的輸入中,只需填寫Common Name,這裡為mypi。
詢問是否認證的地方,同意就行了。經過這一步,keys資料夾中又多出來3個檔案
server.csr(證書籤發請求檔案) server.crt(公鑰) server.key(私鑰)

c. 生成客戶端金鑰

./build-key-pass client1

Enter PEM pass phrase: 輸入客戶端金鑰的密碼,這裡輸入test123,會讓你輸兩次。其它預設就好經過這步後,又多了3個檔案 client1.csr client1.crt client.key

d. 生成dh

./build-dh

這一步要等久一點,現在又多了一個檔案 dh1024.pem

到這裡為止,使用easy-rsa生成金鑰部分,就完成了~

5.Openvpn服務端配置

# 複製一個模板過來先
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server.conf

# 開啟編輯之
nano /etc/openvpn/server.conf
# 裡面都有註釋,這裡直接帖出修改結果吧,註釋跟用不到的選項都被我刪除了
local 192.168.1.111     #樹莓派的內網靜態IP,這裡要改成你的PI的靜態內網IP
port 1194   #Openvpn服務使用的埠
proto udp   #使用udp協議傳輸
dev tun     #使用隧道

ca /etc/openvpn/easy-rsa/keys/ca.crt        #ca公鑰路徑
cert /etc/openvpn/easy-rsa/keys/server.crt  #伺服器公鑰路徑
key /etc/openvpn/easy-rsa/keys/server.key   #伺服器私鑰路徑
dh /etc/openvpn/easy-rsa/keys/dh1024.pem    #dh

server 10.8.0.0 255.255.255.0   #客戶端連線後,所在的子網段

ifconfig-pool-persist ipp.txt   #客戶端使用固定的子網地址,這裡可以不配置

push "redirect-gateway def1 bypass-dhcp"    #閘道器重定向,客戶端的流量都會經由OpenvpnServer
push "dhcp-option DNS 192.168.1.1"          #配置DNS,這裡配置路由器的內網地址即可

duplicate-cn    #允許客戶端的CommonName重複,因為我們填的都是預設值

keepalive 10 120

comp-lzo    #啟動資料壓縮

user nobody     #Openvpn程序執行時所屬的使用者,這裡為了安全
group nogroup   #Openvpn程序執行時所屬的組,這裡為了安全

persist-key     #一直儲存key,避免許可權問題導致不能再次讀取
persist-tun     #一直保持隧道,原因同上

status openvpn-status.log   #Openvpn執行狀態Log,就在Openvpn目錄下,會自動生成
log openvpn.log             #Openvpn執行Log,也在Openvpn目錄下,會自動生成

verb 3                      #log的等級
#測試伺服器配置檔案正確,沒有輸出說明正確,錯誤會提示哪行配錯了
openvpn server.conf

#開始Openvpn服務,提示ok說明啟動成功了
service openvpn restart

6.Openvpn客戶端配置

# 複製一個模板先
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/clientconfig/client.conf

# 編輯之
nano /etc/openvpn/clientconfig/client.conf
# 裡面註釋也很詳細,這裡貼出我精簡後的結果
client      #標明是客戶端配置
dev tun     #使用隧道
proto udp   #使用UDP

remote test.jios.org 1194   #樹莓派外網IP(使用動態域名繫結) + 埠
comp-lzo        

ca ca.crt       #ca公鑰
cert wxlnb.crt  #客戶端公鑰
key wxlnb.key   #客戶端私鑰

verb 3  #log等級

7.防火牆新增規則

cd /etc/openvpn
nano firewall-openvpn.sh

#新增以下內容並儲存
#!/bin/sh

#允許接收目的埠為1194的包;1194就是server.conf中配置的埠
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
#源地址轉換:將vpn子網的ip替換為pi的本地ip
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.1.111

#編輯完後,更改指令碼的讀寫許可權,為了安全
chmod 700 firewall-openvpn.sh

#設定自動啟動
nano /etc/network/interfaces

#新新增的為最後一行,注意Tab對齊
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
    address 192.168.1.111
    netmask 255.255.255.0
    gateway 192.168.1.1
    pre-up /etc/openvpn/firewall-openvpn.sh

8.開啟系統針對ipv4的轉發

nano /etc/sysctl.conf 

#編輯一行為
net.ipv4.ip_forward=1

#配置生效
sysctl -p

9.路由器新增埠轉發
將所有1194過來包,都轉發到Pi的1194埠,極路由的設定結果如下:
埠轉發

10.動態域名繫結
使用極路由提供的外掛就可以完成
動態域名繫結

安裝後,將client.conf,ca.crt,client1.crt,client1.key這4個檔案拷貝至Openvpn的配置目錄下,並且將client.conf改名為client.ovpn。然後登入,輸入生成客戶端金鑰時設定的密碼。如果登入失敗可以看客戶端log,判斷原因在哪裡。

推薦使用xshell登入pi來操作,提供的有xftp,從pi下載配置檔案到電腦,很方便。

最後祝大家搞機快樂,openvpn能成功跑起來,我折騰了好久啊,有幾個原因:
1.linux不熟悉
2.openvpn執行流程不熟悉
3.路由相關知識不熟悉
4.iptables不熟悉