2007年9月20日 星期四

[轉錄OpenVPN on FreeBSD

這篇 quick guide OpenVPN with FreeBSD, PF and Windows XP 寫得蠻清楚的
http://www.ubergeek.co.uk/howtos/openvpn-freebsd-pf-windows-howto.html
以及找到 Richliu 的 wiki 上的 OpenVPN 也很好懂
http://wiki.richliu.com/index.php/OpenVPN
不過我還是在看了 howto 和 man 之後才了解大部分的事
筆記一點東西



* bridged or routed ?

一開始看 howto 的說明, openvpn 有兩種分配 ip 給 client 的方法
想說其實用 vpn 的人不多、IP也夠, 想說用 bridged 的方式就好
但接著看到他推薦 routed 比較好設就馬上改變心意 XD
難怪 google 到的前幾名都是怎麼設 routed 的..
用 routed 的話, /etc/rc.conf 要加上 gateway_enable="YES"
* 裝 OpenVPN

用 ports 裝一下 security/openvpn 就好
記得在 /etc/rc.conf 加上 openvpn_enable="YES"



* logging

就 syslog 一下...
/etc/syslog.conf 加上 !openvpn *.* /var/log/openvpn.log



* firewall 設定 nat forwarding

設好 nat forwarding 這樣才會有正確的 vpn routing
上面那篇用 pf, ipfw 應該也行啦, 只是趕時間就沒查 ipfw, 直接依樣畫葫蘆了

* CA(Certificate Authority) key

要有 openssl, 然後可以用 openvpn 提供的 easy-rsa script
build-ca: 生 CA
build-key-server: 生 server key
build-key: 生 client key, 基本上一個 client 一個 key
build-dh: 生 Diffie Hellman parameters, openvpn 要用的

生完 keys 後, server 要有 ca.crt, server.crt, server.key,
client 要有 ca.crt 和 client key(如果要用的話)



* login authentication

我考慮過兩種方法

1. certificates & keys: 需要一個 client 生一個 key. 正常是每個 client
使用一個 key, 也是有人設成多人用一個 key 啦.... 要的話 server 的設定要加
上 duplicate-cn 就是
2. username & password: 用 shell 帳號, 應該還可以搭配 NIS. 在 server 的
設定加上 plugin /usr/local/lib/openvpn-auth-pam.so login 若要單純用帳
號密碼登入不使用 client key, server 的設定再加上 client-cert-not-required
和 username-as-common-name

方法 2 如果考慮到被聽走密碼的可能, 可以再加上 tls 加密, 用
openvpn --genkey --secret ta.key 產生 tls key, server 與 client 兩邊都要
有這個 key, 並在 server 設定 tls-auth ta.key 0, 在 client 設定
tls-auth ta.key 1



* server 及 client 的設定

基本上改範例就行了
authentication 的設定要依照要用的方式設, 要用哪種就加上相關設定

-- server.conf --
# routed 用的 device
dev tun
# udp server, 若 client 有要設 proxy 要用 tcp
port 1194
proto udp

# vpn nat 的 ip pool, 隨便設一段跟範例不一樣的 private subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

# 把 client 的 default gateway 搶過來, 用 vpn server 去 routing
push "redirect-gateway"
# 設台 DNS server
push "dhcp-option DNS 168.95.1.1"
# vpn ip pool 的 routing
push "route 10.8.0.0 255.255.255.0"

# 用 shell 帳號登入, 並用 username 作辨識
plugin /usr/local/lib/openvpn-auth-pam.so login
username-as-common-name
# 不使用 client key
client-cert-not-required
# 使用 tls
tls-auth ta.key 0
# CA keys 和 Diffie hellman parameters, 放在和設定檔同一目錄下
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem

# 最大 client 可連數目
max-clients 100

# 其他照範例設的
# 如果該台機器有多個 IP, 再加上 local
keepalive 10 120
cipher BF-CBC # Blowfish (default)
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
-- client.ovpn on Windwos --
client
dev tun
proto udp
remote 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
comp-lzo
verb 3
cipher BF-CBC # Blowfish (default)

# 用帳號密碼登入
auth-user-pass

# keys
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1

# For Vista security issue, client 是 Vista 的要加
route-method exe
route-delay 2

沒有留言: