大家好,Bear這次打算介紹簡單的樹莓派伺服器應用
這次介紹的伺服器應用是VPN Server
何謂VPN Server?
虛擬私人網路(Virtual Private Network,簡稱VPN)
通常建立來應用於連線中、大型企業或團體與團體間的私人網路的通訊方法。
簡單的說就是利用點對點與VPN Server建立一個連線通道,利用該VPN Server進入內部網路或外部網路
常用於以下幾種情況:
1.在家中連線到公司架設的VPN Server,成為公司內部網路的一份子,在家中工作QAQ
2.在外面連進家裡架設的VPN Server,獲取家中內部網路資源
3.利用該方法,繞過部分阻擋外部網路的防火牆,俗稱"翻牆"(大心)
沒錯,這次介紹的就是VPN的特殊用法,翻牆
VPN Server的類型很多,小編這次教的是難阻擋的OpenVPN
為何它難阻擋呢?
OpenVPN採用OpenSSL加密,且可自選port
沒錯就是威在可自選port這點,選擇port 443(一種用於加密連線的網頁瀏覽,https)
一般防火牆或規則,很難辨別port 443裡面封包為何,更不用說阻擋port 443的連線
這次介紹的伺服器應用是VPN Server
何謂VPN Server?
虛擬私人網路(Virtual Private Network,簡稱VPN)
通常建立來應用於連線中、大型企業或團體與團體間的私人網路的通訊方法。
簡單的說就是利用點對點與VPN Server建立一個連線通道,利用該VPN Server進入內部網路或外部網路
常用於以下幾種情況:
1.在家中連線到公司架設的VPN Server,成為公司內部網路的一份子,在家中工作QAQ
2.在外面連進家裡架設的VPN Server,獲取家中內部網路資源
3.利用該方法,繞過部分阻擋外部網路的防火牆,俗稱"翻牆"(大心)
沒錯,這次介紹的就是VPN的特殊用法,翻牆
VPN Server的類型很多,小編這次教的是難阻擋的OpenVPN
為何它難阻擋呢?
OpenVPN採用OpenSSL加密,且可自選port
沒錯就是威在可自選port這點,選擇port 443(一種用於加密連線的網頁瀏覽,https)
一般防火牆或規則,很難辨別port 443裡面封包為何,更不用說阻擋port 443的連線
在Windows底下打開pietty或putty或其他可以進行SSH連線的Windows App
如果沒有的話請打開瀏覽器搜尋pietty
在主機名稱輸入樹莓派的區網IP
如果不知道的話,請打開瀏覽器進入IP分享器(或WiFi AP)等設定頁找出樹莓派的區網IP
連線完輸入user id(login as:),password:
畫面如下
如果沒有的話請打開瀏覽器搜尋pietty
在主機名稱輸入樹莓派的區網IP
如果不知道的話,請打開瀏覽器進入IP分享器(或WiFi AP)等設定頁找出樹莓派的區網IP
連線完輸入user id(login as:),password:
畫面如下
不要害怕,咱們開始當個Geek吧(大誤)
小編這裡採用的是官方推薦的Raspbian “wheezy”
鍵入
sudo apt-get update
(這指令用於更新目前源庫,就是更新Raspbian可用App的清單)
要求輸入密碼
sudo apt-get upgrade
(更新PI目前的有的Apps)
一段時間後,來安裝openvpn吧
鍵入
sudo apt-get install openvpn openssl vi vim
(安裝四個App,分別是openvpn,本篇主角,openssl,建立憑證
vi、vim,終端機下非常好用的文書編輯軟體)
好了,建立VPN Server完成
該休息了^_<
.
.
.
.
.
.
.
.
.
.
.
.
.
只說到這,各位讀者一定認為Bear很混
接下來就是openvpn的設定與啟動
首先,現建立連線用的憑證,可視為一種使用者帳號密碼
為了方便,需要root身分來執行以下動作
如果之前沒有設定root密碼,請自行建立一個
sudo passwd
待要求後重覆輸入要建立的root密碼
注意,root在Uuix-like的作業系統中,是神一般的存在,請建立強式密碼
不要隨意使用root身分執行,在root底下,任何行為請小心謹慎
su
(su,切換user,無指定ID表示root)
要求輸入root密碼
cd /etc/openvpn/
移動至openvpn安裝後位置
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./easy-rsa
將openvpn建立憑證的程式複製到/etc/openvpn/easy-rsa底下
cd ./easy-rsa/
vim ./vars
到easy-rsa底下用vim修改vars檔案,簡易設定憑證要的參數
# Increase this to 2048 if you
# are paranoid. This will slow
# down TLS negotiation performance
# as well as the one-time DH parms
# generation process.
export KEY_SIZE=2048
將1024修改成2048,增加憑證難度
修改方式,按下鍵盤i鍵,可開始編輯,不需編輯請按Esc鍵
需存檔時,按下Esc鍵後按出":"(Shift+ ;)wq!,如下圖
小編這裡採用的是官方推薦的Raspbian “wheezy”
鍵入
sudo apt-get update
(這指令用於更新目前源庫,就是更新Raspbian可用App的清單)
要求輸入密碼
sudo apt-get upgrade
(更新PI目前的有的Apps)
一段時間後,來安裝openvpn吧
鍵入
sudo apt-get install openvpn openssl vi vim
(安裝四個App,分別是openvpn,本篇主角,openssl,建立憑證
vi、vim,終端機下非常好用的文書編輯軟體)
好了,建立VPN Server完成
該休息了^_<
.
.
.
.
.
.
.
.
.
.
.
.
.
只說到這,各位讀者一定認為Bear很混
接下來就是openvpn的設定與啟動
首先,現建立連線用的憑證,可視為一種使用者帳號密碼
為了方便,需要root身分來執行以下動作
如果之前沒有設定root密碼,請自行建立一個
sudo passwd
待要求後重覆輸入要建立的root密碼
注意,root在Uuix-like的作業系統中,是神一般的存在,請建立強式密碼
不要隨意使用root身分執行,在root底下,任何行為請小心謹慎
su
(su,切換user,無指定ID表示root)
要求輸入root密碼
cd /etc/openvpn/
移動至openvpn安裝後位置
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./easy-rsa
將openvpn建立憑證的程式複製到/etc/openvpn/easy-rsa底下
cd ./easy-rsa/
vim ./vars
到easy-rsa底下用vim修改vars檔案,簡易設定憑證要的參數
# Increase this to 2048 if you
# are paranoid. This will slow
# down TLS negotiation performance
# as well as the one-time DH parms
# generation process.
export KEY_SIZE=2048
將1024修改成2048,增加憑證難度
修改方式,按下鍵盤i鍵,可開始編輯,不需編輯請按Esc鍵
需存檔時,按下Esc鍵後按出":"(Shift+ ;)wq!,如下圖
按下Enter完成存檔(w)並離開(q)
# In how many days should the root CA key expire?
export CA_EXPIRE=3650
# In how many days should certificates expire?
export KEY_EXPIRE=3650
憑證有效時間,預設為3650天,可自行修改
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="TW"
export KEY_PROVINCE="Taiwan"
export KEY_CITY="Taipei"
export KEY_ORG="TakoBear"
export KEY_EMAIL="[email protected]"
export [email protected]
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=changeme
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234
預設憑證資訊,可自行處理
好了,可以開始建立憑證
source ./vars
將剛剛建立的文件讀入
./clean-all
清空舊有憑證
./build-ca
./build-key-server YourServerName
./build-key UserName1
./build-key UserName2
./build-key UserName3(依需求建立數量)
./build-dh
openvpn --genkey --secret tls.key
上述皆為建立憑證所需動作
mv ./tls.key ./keys/
將tls.key移到keys資料夾下
利用FTP Server、NFS Server、File Server等將憑證複製取出(後續文章再說明)
接下來,設定OpenVPN設定檔
一樣使用root身分
cd /etc/openvpn/
vim ./openvpn.conf
openvpn.conf內容如下
dev tun
;; Listen port: 443
port 443
;; tcp mode
proto tcp
;; vpn 使用網段,勿和原有網段相衝突
server 172.16.0.0 255.255.255.0
;; 允許client間互相連接
;client-to-client
push "redirect-gateway def1"
;;DNS設定
push "dhcp-option DNS 8.8.8.8"
;;最大使用者量
max-clients 12
keepalive 10 120
tls-server
;; Key File 設定
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/YourServerName.crt
key /etc/openvpn/easy-rsa/keys/YourServerName.key
;; openvpn 啟動的身份;如果不是root,會影響後面的進階設定
user root
group root
;;----以下是進階部份設定,非必要----
;; 針對client端個別設定
client-config-dir /etc/openvpn/ccd
ccd-exclusive
;; client登入後要執行的script
;learn-address "/etc/openvpn/learnscript/userlog"
;; 以下兩行為啟動 mysqld ,利用user/password認證
;plugin /usr/lib/openvpn/openvpn-auth-pam.so openvpn
;; 將登入使用的username,當作憑證的CN name(寫入log需要)
;username-as-common-name
;;----進階部份設定結束----
comp-lzo
persist-tun
persist-key
tls-auth /etc/openvpn/easy-rsa/keys/tls.key 0
;status /var/log/openvpn/openvpn-status.log
;log /var/log/openvpn/openvpn.log
verb 3
建立不同使用者登入後的IP
cd /etc/openvpn/
mkdir ./ccd
cd ./ccd
vim ./UserName1
編輯輸入
ifconfig-push 172.16.0.9 172.16.0.10
vim ./UserName2
ifconfig-push 172.16.0.13 172.16.0.14
vim ./UserName3
ifconfig-push 172.16.0.17 172.16.0.18
(視需求決定,ip間距為4)
接下來正式啟動Raspberry Pi上面的openvpn服務
sudo /etc/init.d/openvpn restart
當然,此時的VPN Server有提供連線,但無對外能力
建立一批次檔(bash)對PI的防火牆做些例外吧
vim ./start-nat.sh
#!/bin/bash
ipt="/sbin/iptables"
# Clean the all rules
$ipt -F
$ipt -X
$ipt -t nat -F
$ipt -t nat -X
# Enable ip_forward
echo "1" > /proc/sys/net/ipv4/ip_forward
# For NAT routing
$ipt -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE
$ipt -t nat -L
當然,上述做法是清空iptables的內容,相當於打開訪火牆
Bear這邊不多談iptables的設定
如果想多了解iptables的話,可自行尋找相關介紹
執行批次檔
sh ./start-nat.sh
到這邊VPN Server建立的部分就真的要告一段落了!
下篇文章將介紹client的部分!
更多消息請繼續關注TakoBear!
# In how many days should the root CA key expire?
export CA_EXPIRE=3650
# In how many days should certificates expire?
export KEY_EXPIRE=3650
憑證有效時間,預設為3650天,可自行修改
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="TW"
export KEY_PROVINCE="Taiwan"
export KEY_CITY="Taipei"
export KEY_ORG="TakoBear"
export KEY_EMAIL="[email protected]"
export [email protected]
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=changeme
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234
預設憑證資訊,可自行處理
好了,可以開始建立憑證
source ./vars
將剛剛建立的文件讀入
./clean-all
清空舊有憑證
./build-ca
./build-key-server YourServerName
./build-key UserName1
./build-key UserName2
./build-key UserName3(依需求建立數量)
./build-dh
openvpn --genkey --secret tls.key
上述皆為建立憑證所需動作
mv ./tls.key ./keys/
將tls.key移到keys資料夾下
利用FTP Server、NFS Server、File Server等將憑證複製取出(後續文章再說明)
接下來,設定OpenVPN設定檔
一樣使用root身分
cd /etc/openvpn/
vim ./openvpn.conf
openvpn.conf內容如下
dev tun
;; Listen port: 443
port 443
;; tcp mode
proto tcp
;; vpn 使用網段,勿和原有網段相衝突
server 172.16.0.0 255.255.255.0
;; 允許client間互相連接
;client-to-client
push "redirect-gateway def1"
;;DNS設定
push "dhcp-option DNS 8.8.8.8"
;;最大使用者量
max-clients 12
keepalive 10 120
tls-server
;; Key File 設定
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/YourServerName.crt
key /etc/openvpn/easy-rsa/keys/YourServerName.key
;; openvpn 啟動的身份;如果不是root,會影響後面的進階設定
user root
group root
;;----以下是進階部份設定,非必要----
;; 針對client端個別設定
client-config-dir /etc/openvpn/ccd
ccd-exclusive
;; client登入後要執行的script
;learn-address "/etc/openvpn/learnscript/userlog"
;; 以下兩行為啟動 mysqld ,利用user/password認證
;plugin /usr/lib/openvpn/openvpn-auth-pam.so openvpn
;; 將登入使用的username,當作憑證的CN name(寫入log需要)
;username-as-common-name
;;----進階部份設定結束----
comp-lzo
persist-tun
persist-key
tls-auth /etc/openvpn/easy-rsa/keys/tls.key 0
;status /var/log/openvpn/openvpn-status.log
;log /var/log/openvpn/openvpn.log
verb 3
建立不同使用者登入後的IP
cd /etc/openvpn/
mkdir ./ccd
cd ./ccd
vim ./UserName1
編輯輸入
ifconfig-push 172.16.0.9 172.16.0.10
vim ./UserName2
ifconfig-push 172.16.0.13 172.16.0.14
vim ./UserName3
ifconfig-push 172.16.0.17 172.16.0.18
(視需求決定,ip間距為4)
接下來正式啟動Raspberry Pi上面的openvpn服務
sudo /etc/init.d/openvpn restart
當然,此時的VPN Server有提供連線,但無對外能力
建立一批次檔(bash)對PI的防火牆做些例外吧
vim ./start-nat.sh
#!/bin/bash
ipt="/sbin/iptables"
# Clean the all rules
$ipt -F
$ipt -X
$ipt -t nat -F
$ipt -t nat -X
# Enable ip_forward
echo "1" > /proc/sys/net/ipv4/ip_forward
# For NAT routing
$ipt -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE
$ipt -t nat -L
當然,上述做法是清空iptables的內容,相當於打開訪火牆
Bear這邊不多談iptables的設定
如果想多了解iptables的話,可自行尋找相關介紹
執行批次檔
sh ./start-nat.sh
到這邊VPN Server建立的部分就真的要告一段落了!
下篇文章將介紹client的部分!
更多消息請繼續關注TakoBear!