1. 安裝openvpn
apt-get install openvpn
2. 建立Certificate Authority(CA)和產生certificates與金鑰
(1) 先切換目錄至/usr/share/doc/openvpn/examples/easy-rsa,執行
. ./vars (注意!! . 和 . 之間有空一格)
(2) 建立CA,產生出來檔案會放置在./keys/目錄
./clean-all
./build-ca
執行結束後會產生 ca.crt 和 ca.key 兩個檔案
(3) 建立 server 用的 certificate & key
./build-key-server server
會出現幾個問題,其中的"Common Name"設server(當然也可以設定自己所要的名稱,只是產 生的檔名會不同而已)則產生 01.pem、server.crt、server.csr和 server.key
(4) 建立 client 用的 certificate & key
./build-key client1
跟server差不多,也會出現問題。Common Name設成client1會產生 client1.crt、client1.csr、 client1.key
以此類推,可以產生其他的client key,ex client2、client3…
(5) 產生 Diffie Hellman parameters
./build-dh
會產生 dh1024.pem
3. 增強OpenVPN的安全性
產生一個secret key
openvpn --genkey --secret ta.key
會在所在目錄上產生 ta.key(之後設定檔會用到)
4. server端的設定
(1) 複製certificates & keys到/etc/openvpn (其實只要跟設定檔同目錄就好,只是一般設定檔是放置於此)
cp ./keys/ca.* /etc/openvpn/
cp ./keys/server.* /etc/openvpn/
cp ./keys/dh1024.pem /etc/openvpn/
cp ./ta.key /etc/openvpn/
(注意!! 以上指令均是預設所在目錄為/usr/share/doc/openvpn/examples/easy-rsa/下)
(2) 產生設定檔 server.conf
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
gzip -d /etc/openvpn/server.conf.gz
(3) 編輯 server.conf
設定檔內要有以下內容
local 對外的public-IP //這邊要設定外面連線得到的IP,設為區網的private-IP會無法連線成功
port 1194 //vpn server的port。這是預設就有的,沒太大問題
proto udp //使用協定
dev tun //使用tun device。另有tap,在比較複雜的環境所用的。
tls-server //這行是檔案裡沒有的,請自行加上
ca ca.crt //此設定為之前所產生CA檔名
cert server.crt //設定為所產生的certificate檔名
key server.key //設定為所產生的key檔名
tls-auth ta.key 0
dh dh1024.pem
server 10.8.0.0 255.255.255.0 //設定vpn網域。前為network,後為netmask。可自行設定,不與現有的network相同即可
ifconfig-pool-persist ipp.txt
push "route 192.168.1.0 255.255.255.0" //將設定的network加入路由。若想與網域其他電腦連線則須加入此設定
push "redirect-gateway" //client連線後自動給定一個default gateway
push "dhcp-option DNS 10.8.0.1" //client連線後的DNS設定。預設是為vpn server本身為DNS,若不是則要改為其他的DNS IP。
duplicate-cn
keepalive 10 120 //每10秒ping1次,若120秒內沒收到封包則認定斷線
comp-lzo //在vpn link上啟用壓縮
max-clients 10 //最大client數
user nobody //vpn daemon執行身分
group nogroup //vpn daemon執行群組
persist-key
persist-tun
status openvpn-status.log //status log檔名設定
log openvpn.log //log檔名設定
verb 3
(4) 啟動VPN Server
若模組tun尚未載入(用lsmod查看),則需先執行modprobe tun
/etc/init.d/openvpn start
若沒出現錯誤訊息,表示啟動成功。
(5) Firewall 及 NAT 設定
iptables -A INPUT -p UDP -i ppp0 --dport 1194 -j ACCEPT //開放對外介面pp0的udp port 1149
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ppp0 -j MASQUERADE //對vpn網域的封包作masquerade
(6) Bind9設定
在/etc/bind/named.conf.options加入:
allow-query {127.0.0.1; 192.168.1.0/24; 10.8.0.0/24;};
存檔後重新啟動bind9。
5. client端的設定(以windows為例)
(1) openvpn for windows安裝完成後,將ca.crt、ca.key、client1.crt、client1.csr、client1.key、dh1024.pem及ta.key複製到c:/Program Files/OpenVPN/config中
(2) 將c:/Program Files/OpenVPN/sample-config的client.ovpn複製到c:/Program Files/OpenVPN/config
(3) 修改client.ovpn設定
client
dev tun
proto udp
remote vpn server的public-IP 1194
nobind
persist-key
persist-tun
tls-client
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
ns-cert-type server
comp-lzo
儲存後,開啟"服務"將OpenVPN Service啟動,TAP-Win32 Adapter即會連上vpn server並取得其ip設定
Reference:
OpenVPN , DebianWiki Taiwan:http://www.debian.org.tw/index.php/OpenVPN