OpenVPN设置

来源:互联网 发布:微信扫码群发软件 编辑:程序博客网 时间:2024/05/10 16:56

FROM http://blog.candyz.org/20050615/85

之前有玩了一下OpenVPN ,不过没搞定,就没再摸了
昨天(6/14)在台大有场Arne OpenVPN的心得分享
回家后再给它试一次,终于试成功了
其实OpenVPN的应用方式有很多种,也要慢慢去试出来

安装OpenVPN

不管是Linux Windows或是Mac OS X,都有现成的Binary套件可以使用
请到OpenVPN网站下载合适的版本回去安装
OpenVPN GUI for Mac请到这里下载Tunnelblick回去安装
OpenVPN GUI for Windows请到这里下载Install Packages回去安装 我的Server系统用的是FC3,因此,去抓DAG的binary RPM 下载回来后执行下列指令安装: $ rpm -ivh openvpn-2.0-1.1.fc3.rf.i386.rpm



建立CA certificate 及Server/Client keys

我是在FC3 Server下来建立所有相关的CA certificate及keys 
$ cd /usr/share/doc/openvpn-2.0/easy-rsa 
ease-rsa底下的一些scripts (clean-all build-*等等)记得到先chmod 755让它们可以执行

编辑vars 档案

主要是设定最后面的KEY_COUNTRY KEY_PROVINCE KEY_CITY KEY_ORG KEY_EMAIL等参数
$ vi vars 
$ . vars 
$ ./clean-all

产生CA certificate

$ ./build-ca 
会产生keys/ca.*

产生Server 的key

$ ./build-key-server server 
会产生keys/server.*

产生Diffie Hellman parameters

$ ./build-dh 
会产生keys/dh1024.pem

产生tls-auth key

$ openvpn –genkey –secret ta.key 
会产生ta.key 
$ mv ta.key keys/

产生Client 的key

$ ./build-key ibook 
会产生keys/ibook.*

$ ./build-key macmini 
会产生keys/macmini.*

$ ./build-key fujitsu 
会产生keys/fujitsu.*

$ ./build-key ns 
会产生keys/ns.*

$ ./build-key fedora 
会产生keys/fedora.*

我总共产生了五台Clients 机器的keys (ibook macmini fujitsu ns fedora)

所有的CA certificate及keys都建好后,接下来就是根据不同的状况来设立不同的设定档
底下为目前我个人成功在使用的例子:

状况一

在NAT Server上架OpenVPN Server(家里的NAT Server),然后OpenVPN Client则是架设在外面的任一台电脑上(我的ibook) 
这样,我在公司或者是在外面的网咖上网时,就可以利用OpenVPN连上家里的Server以及家里NAT底下的其他机器(192.168.1.x/24) Server端: eth0: abcd (Real IP) eth1: 192.168.1.254/24tap0: 192.168.2.1/24 Client端: eth0: efgh (Real IP or Virtual IP) tap0: 192.168.2.x/24









Server 端的设定

我的Server是FC3 
首先,要把Server端相关的CA certificate及keys复制到Server机器的/etc/openvpn/目录底下
主要有ca.crt ta.key dh1024.pem及server.* 
$ cd /usr/share /doc/openvpn-2.0/easy-rsa/keys 
$ cp ca.crt ta.key dh1024.pem server.* /etc/openvpn/

接下来就是设定档部份了,先复制一份范例档来修改
$ cd /usr/share/doc/openvpn-2.0/sample-config-files 
$ cp server.conf /etc/openvpn/ 
$ vi /etc/ openvpn/server.conf 
—————————————- 
local abcd ; Server的Real IP 
port 1194 
proto tcp ;使用tcp or udp 
dev tap ;使用tap or tun 
ca ca.crt ;底下几行指定ca.crt及各key的位置
cert server.crt 
key server.key 
dh dh1024.pem 
server 192.168.2.0 255.255.255.0 ; OpenVPN所使用的网段
ifconfig-pool-persist ipp.txt ; client Virtual IP的对照表
push “route 192.168.1.0 255.255.255.0″ ;让OpenVPN client也可以连192.168.1.x网段
client-to-client ;让各个OpenVPN client也可以互连
keepalive 10 120 
tls-auth ta.key 0 ; Server要设0 Client设1 
comp-lzo 
max-clients 10 
user nobody 
group nobody 
persist-key 
persist-tun 
status openvpn-status.log 
verb 3 
—————————————- 
都设定好后,就可以启动OpenVPN了
$ /etc/init.d/openvpn start 
成功启动后,你就会看到系统多了一个tap0的装置,IP为192.168.2.1

Client 端的设定

先为我的ibook (Mac OS X)做设定
首先,还是要先从Server上把ca.crt ta.key及ibook.*这几个档案都复制到ibook上
预设是放在~/Library/openvpn /底下
然后编辑ibook client端的设定档
$ vi ~/Library/openvpn/openvpn.conf 
或是直接执行应用程式里的Tunnelblick,然后会在选单列上看到图示,选择“Edit Config File…”—— ———————————- client ;表示这是client端的设定 dev tap proto tcp remote abcd 1194 ; abcd为Server的IP resolv-retry infinite nobind user nobody group nobody persist-keypersist-tun ca ca .crt cert ibook.crt key ibook.key tls-auth ta.key 1 ; client端要设成1 comp-lzoverb 3 —————————————- 编辑好后储存 然后再选取选单列上的Tunnelblick里的“Connect” 这样就连上了 执行ifconfig来看,会多了一个tap0 IP为192.168.2.2 接着来测试看看 $ ping 192.168.2.1 $ ping 192.168.1.254 $ ping 192.168.1 .x 都ping的到,那恭喜了



























同样的方式,我可以在公司的Server上再架一个OpenVPN的Server 
这样我的ibook就可以同时连上家里及公司内的各台机器了
不过,Mac OS X上的这个Tunnelblick程式,目前只支援连一台Server 
若是想一次连到多个OpenVPN server,可以不要用GUI,直接用command line 
同样先复制所需的CA certificate及keys到~/Library/openvpn/底下
然后,同样在~/Library/openvpn/底下建立各个设定档,如client1.conf client2.conf 
然后手动执行: 
$ sudo openvpn –config client1.conf & 
要连线到第二个OpenVPN Server,再执行: 
$ sudo openvpn –config client2.conf & 
依此类推,或是干脆直接写个script来启动多个设定档: 
startOpenVPN.sh 
—————————————— 
#!/bin/bash 
sudo pwd 
cd ~/Library/openvpn/ 
for i in *.conf 
do 
sudo /usr/local/sbin/openvpn –config $i & 
done 
—————————————— 
然后在终端机下直接执行sh startOpenVPN.sh即可 再来设定我的Fujitsu Notebook (Windows XP) 设定档放在C:\Program Files\OpenVPN\config\目录底下 相关的CA certificate及keys一样是复制到C:\Program Files\OpenVPN\config\目录底下 (包含ca. crt ta.key fujitsu.*) 设定档可以直接复制C:\Program Files\OpenVPN\sample-config\里的client再来修改即可—————————————- client dev tap proto tcp remote abcd 1194 ; abcd为Server的IPresolv-retry infinite nobind user nobody group nobody persist-key persist-tun ca ca.crt cert fujitsu.crt key fujitsu.key tls-auth ta.key 1 comp-lzo verb 3 —————————————- 再来就是点选状态列里的“OpenVPn GUI”选择“Connect”

























状况二

在家里及公司的Server上各架一台OpenVPN Server 
同时,两台OpenVPN Server也各自再跑一个OpenVPN Client,互相连对方
这样,在公司内的任何一台机器,就可以利用OpenVPN连上家里的Server以及家里NAT底下的其他机器(192.168.1.x/24) 
同样的,在家里的任何一台机器,也可以连上公司内部网路里的任一台机器(10.0.0.x/24) 家里Server端: eth0: abcd (Real IP) eth1: 192.168.1.254/24 tap0: 192.168.2.1/24 tap1: 192.168.3.x/24 公司Server端: eth0: efgh (Real IP) eth1: 10.0.0.254 /24 tap0: 192.168.3.1/24tap1: 192.168.2.x/24 产生CA certificate及kyes并复制到各个Servers及Clinets (请参考之前的做法) 设定档的部份如下:














家里Server 端的设定

$ vi /etc/openvpn/server.conf 
—————————————- 
local abcd ;家里Server的Real IP 
port 1194 
proto tcp 
dev tap 
ca ca.crt 
cert server.crt 
key server.key 
dh dh1024.pem 
server 192.168.2.0 255.255.255.0 
ifconfig-pool-persist ipp.txt 
push “route 192.168.1.0 255.255.255.0″ 
client-to-client 
keepalive 10 120 
tls-auth ta.key 0 
comp-lzo 
max-clients 10 
user nobody 
group nobody 
persist-key 
persist-tun 
status openvpn-status.log 
verb 3 
—————————————-

家里Client 端的设定

$ vi /etc/openvpn/client.conf 
—————————————- 
client 
dev tap 
proto tcp 
remote abcd 1194 ; abcd为公司Server的IP 
resolv-retry infinite 
nobind 
user nobody 
group nobody 
persist- key 
persist-tun 
ca ca.crt 
cert ns.crt 
key ns.key 
tls-auth ta.key 1 
comp-lzo 
verb 3 
—————————————-

公司Server 端的设定

$ vi /etc/openvpn/server.conf 
—————————————- 
local abcd ;公司Server的Real IP 
port 1194 
proto tcp 
dev tap 
ca ca.crt 
cert server_office.crt 
key server_office.key 
dh dh1024.pem 
server 192.168.3.0 255.255.255.0 
ifconfig-pool-persist ipp.txt 
push “route 10.0.0.0 255.255.255.0″ 
client-to-client 
keepalive 10 120 
tls-auth ta.key 0 
comp-lzo 
max-clients 10 
user nobody 
group nobody 
persist-key 
persist-tun 
status openvpn-status.log 
verb 3 
—————————————-

公司Client 端的设定

$ vi /etc/openvpn/client.conf 
—————————————- 
client 
dev tap 
proto tcp 
remote abcd 1194 ; abcd为家里Server的IP 
resolv-retry infinite 
nobind 
user nobody 
group nobody 
persist- key 
persist-tun 
ca ca.crt 
cert fedora.crt 
key fedora.key 
tls-auth ta.key 1 
comp-lzo 
verb 3