樹莓派搭建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不熟悉