本来我是在美国的VPS服务器上安装的pptp vpn,这个vpn可以用windows自带的拨号连接,配置也很方便。刚配置好的时候很好用,可以开youtube也可以访问一些被封闭的站点。但是后来家里的歌华有线好像调整了一些路由配置,导致我在家里就不能连接vpn了。单位也不能连接。我用老婆家里的adsl尝试连接正常,用联通3G连接也正常。。。。这个既然是网络的问题,估计个人也解决不了了
最近单位也开始搞起来封锁了,开心、verycd等都被封。。。又不能用pptpd vpn了。。。看来该想想其他办法了。代理尝试了,不管用,看来不是基于域名的限制。
于是就开始尝试采用openvpn了。
参考了
http://www.throx.net/2008/04/13/openvpn-and-centos-5-installation-and-configuration-guide/
http://www.xiaohui.com/dev/server/20070514-install-openvpn.htm
2010年10月14日更新
加入官方CentOS下,iptables规则修改.保证顺利nat上网
整体方案
采用位于美国的CentOS 5.3 Linux服务器搭建openvpn服务器,并通过iptables的nat功能使openvpn服务器当做客户端网关。
客户端安装OpenVPN GUI程序连接服务器
服务器
服务器采用位于美国的vps
系统CentOS 5.3
安装openvpn作为vpn服务器软件
OpenVPN服务器安装
kernel 需要支持 tun 设备, 需要加载 iptables 模块.
检查 tun 是否安装:
- modinfo tun
- 或者
- find / -name tun.o -print
安装需要的相关软件
- yum install rpm-build
- yum install autoconf.noarch
- yum install zlib-devel
- yum install pam-devel
- yum install openssl-devel
安装环境准备好后,我们下载需要安装的软件。一共需要下载两个软件openvpn 2.0.9和lzo-1.08-4
- wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
- wget http://openvpn.net/release/lzo-1.08-4.rf.src.rpm
安装lzo
- rpmbuild --rebuild lzo-1.08-4.rf.src.rpm
- rpm -Uvh /usr/src/redhat/RPMS/i386/lzo-*.rpm
安装openvpn
- rpmbuild -tb openvpn-2.0.9.tar.gz
- rpm -Uvh /usr/src/redhat/RPMS/i386/openvpn-2.0.9-1.i386.rpm
安装后,复制配置文件
- cp -r /usr/share/doc/openvpn-2.0.9/easy-rsa/ /etc/openvpn/
- cp /usr/share/doc/openvpn-2.0.9/sample-config-files/server.conf /etc/openvpn/
配置生成CA脚本需要的配置文件vars
- vi /etc/openvpn/easy-rsa/vars
打开vars后,找到文件最后的如下内容
- export KEY_COUNTRY=KG
- export KEY_PROVINCE=NA
- export KEY_CITY=BISHKEK
- export KEY_ORG="OpenVPN-TEST"
- export KEY_EMAIL="me@myhost.mydomain"
根据自己信息修改上面内容,下面是具体含义
- export KEY_COUNTRY=KG 设置国家
- export KEY_PROVINCE=NA 设置省份
- export KEY_CITY=BISHKEK 设置城市
- export KEY_ORG="OpenVPN-TEST" 设置组织
- export KEY_EMAIL="me@myhost.mydomain" 设置邮件
设置好后,执行如下命令
- cd /etc/openvpn/easy-rsa/
- . ./vars
- ./clean-all
- 注意上面的. ./vars两个点之间有一个空格
建立CA证书
- ./build-ca
生成后,ls keys 可以看到ca.crt ca.key文件
建立服务器密钥
- ./build-key-server xinlogs
- 注意这里的xinlogs是我给密钥起的名字,可以根据个人情况修改
生成Diffie-Hellman文件
- ./build-dh
以上文件都正确生成后,拷贝文件到正确目录
- cd /etc/openvpn/easy-rsa/
- cp keys/ca.crt ../
- cp keys/dh1024.pem ../
- cp keys/xinlogs.key ../
- cp keys/xinlogs.crt ../
生成客户端密钥
- ./build-key client-1
这里client-1是客户端密钥的文件名,如果需要创建多个客户端密钥,就修改client-1名字多次生成即可。
修改/etc/openvpn/server.conf配置
- local 204.74.212.217
- #修改local后面ip为服务器地址
- dev tap
- ;dev tun
- #默认是dev tun修改为dev tap,tap是可以路由模式 tun 是以太网隧道模式。具体区别我也不太清楚
- ca ca.crt
- cert xinlogs.crt
- key xinlogs.key
- #cert后面修改为生成的服务器crt文件xinlogs.crt
- #key后面修改为生成的服务器key文件xinlogs.key
- dh dh1024.pem
- #dh后面修改问生成的dh1024.pem
- server 10.8.0.0 255.255.255.0
- #server后面基本就用默认的10.8.0.0 255.255.255.0即可
- ifconfig-pool-persist ipp.txt
- #这个默认的ipp.txt就可以
- push "route 10.8.0.0 255.255.255.0"
- #添加客户端路由
- push "redirect-gateway"
- #修改客户端默认路由
- push "dhcp-option DNS 8.8.8.8"
- #修改客户端默认dns
- client-to-client
- #允许连接到vpn的客户端可以互相访问
- duplicate-cn
- keepalive 10 120
- comp-lzo
- #启用lzo压缩
- user nobody
- group nobody
- persist-key
- persist-tun
- status /var/log/openvpn-status.log
- log /var/log/openvpn.log
- log-append /var/log/openvpn.log
- verb 3
启动停止openvpn
- service openvpn start
- #启动openvpn服务
- service openvpn stop
- #停止openvpn服务
配置iptables
- iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 214.174.212.217
- #上面命令最后的214.174.212.217是服务器的公网地址,需要根据自己情况修改
- service iptables save
确认net.ipv4.ip_forward = 1后,服务器就全部配置完成。
如果是用的CentOS官方版本,不是VPS.那因为它自带的iptables规则限制,还需要在/etc/sysconfig/iptables加入下面语句才可以顺利nat上网
- -A RH-Firewall-1-INPUT -i tap+ -j ACCEPT
- cat /etc/sysctl.conf |grep forward
- # Controls IP packet forwarding
- net.ipv4.ip_forward = 1
- #如果不是1,请用vi修改/etc/sysctl.conf文件
Win7下Openvpn GUI安装
从 http://openvpn.se下载安装文件
Latest stable release: 1.0.3 with OpenVPN 2.0.9 (2006-10-17)
我们直接下载http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe
注意:下载后,别着急双击安装。先右键属性,设置兼容模式为windosxp sp3 并用管理员身份运行。

然后再运行安装。
客户端配置
安装后,将服务器/etc/openvpn/easy-rsa/keys/目录下的ca.crt、client-1.crt和client-1.key三个文件拷贝到C:Program FilesOpenVPNconfig目录下
再将C:Program FilesOpenVPNsample-config目录下的client.ovpn文件拷贝到C:Program FilesOpenVPNconfig目录下。
在开始->所有程序里找到openvpn,进入里面右键点击OpenVPN GUI属性,同样修改兼容模式为windows xp sp3 以管理员运行
修改后,运行openvpn gui程序
正确运行后,电脑的右下角会出现openvpn的图标,右键点击选择Edit Config来修改客户端配置文件
下面是我全部客户端配置文件
- ##############################################
- # Sample client-side OpenVPN 2.0 config file #
- # for connecting to multi-client server. #
- # #
- # This configuration can be used by multiple #
- # clients, however each client should have #
- # its own cert and key files. #
- # #
- # On Windows, you might want to rename this #
- # file so it has a .ovpn extension #
- ##############################################
- # Specify that we are a client and that we
- # will be pulling certain config file directives
- # from the server.
- client
- # Use the same setting as you are using on
- # the server.
- # On most systems, the VPN will not function
- # unless you partially or fully disable
- # the firewall for the TUN/TAP interface.
- dev tap
- ;dev tun
- # Windows needs the TAP-Win32 adapter name
- # from the Network Connections panel
- # if you have more than one. On XP SP2,
- # you may need to disable the firewall
- # for the TAP adapter.
- ;dev-node MyTap
- # Are we connecting to a TCP or
- # UDP server? Use the same setting as
- # on the server.
- ;proto tcp
- proto udp
- # The hostname/IP and port of the server.
- # You can have multiple remote entries
- # to load balance between the servers.
- remote 214.174.212.217 1194
- ;remote my-server-2 1194
- # Choose a random host from the remote
- # list for load-balancing. Otherwise
- # try hosts in the order specified.
- ;remote-random
- # Keep trying indefinitely to resolve the
- # host name of the OpenVPN server. Very useful
- # on machines which are not permanently connected
- # to the internet such as laptops.
- resolv-retry infinite
- # Most clients don't need to bind to
- # a specific local port number.
- nobind
- # Downgrade privileges after initialization (non-Windows only)
- ;user nobody
- ;group nobody
- # Try to preserve some state across restarts.
- persist-key
- persist-tun
- # If you are connecting through an
- # HTTP proxy to reach the actual OpenVPN
- # server, put the proxy server/IP and
- # port number here. See the man page
- # if your proxy server requires
- # authentication.
- ;http-proxy-retry # retry on connection failures
- ;http-proxy [proxy server] [proxy port #]
- # Wireless networks often produce a lot
- # of duplicate packets. Set this flag
- # to silence duplicate packet warnings.
- ;mute-replay-warnings
- # SSL/TLS parms.
- # See the server config file for more
- # description. It's best to use
- # a separate .crt/.key file pair
- # for each client. A single ca
- # file can be used for all clients.
- ca ca.crt
- cert client-1.crt
- key client-1.key
- # Verify server certificate by checking
- # that the certicate has the nsCertType
- # field set to "server". This is an
- # important precaution to protect against
- # a potential attack discussed here:
- # http://openvpn.net/howto.html#mitm
- #
- # To use this feature, you will need to generate
- # your server certificates with the nsCertType
- # field set to "server". The build-key-server
- # script in the easy-rsa folder will do this.
- ;ns-cert-type server
- # If a tls-auth key is used on the server
- # then every client must also have the key.
- ;tls-auth ta.key 1
- # Select a cryptographic cipher.
- # If the cipher option is used on the server
- # then you must also specify it here.
- ;cipher x
- # Enable compression on the VPN link.
- # Don't enable this unless it is also
- # enabled in the server config file.
- comp-lzo
- # Set log file verbosity.
- verb 3
- # Silence repeating messages
- ;mute 20
- route-method exe
- route-delay 2
其实主要修改的就是如下地方
- client
- #说明这个是客户端配置文件
- dev tap
- ;dev tun
- #这个和服务器一样就可以
- remote 214.174.212.217 1194
- #这个ip要修改为服务器的公网ip地址
- resolv-retry infinite
- nobind
- persist-key
- persist-tun
- ca ca.crt
- cert client-1.crt
- key client-1.key
- #上面三行一定要根据自己生成的密钥配合
- comp-lzo
- #启用lzo压缩
- # Set log file verbosity.
- verb 3
- route-method exe
- route-delay 2
- #最后这两行win7如果不加上,就不能启动修改路由,导致拨vpn成功,但是不能通过远程服务器做网关上网
这些配置完成后,右键点openvpn gui在桌面右下角图标选择Connect连接
我正确连接后的日志如下
- Mon Mar 15 13:03:14 2010 OpenVPN 2.0.9 Win32-MinGW [SSL] [LZO] built on Oct 1 2006
- Mon Mar 15 13:03:14 2010 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
- Mon Mar 15 13:03:14 2010 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
- Mon Mar 15 13:03:14 2010 LZO compression initialized
- Mon Mar 15 13:03:14 2010 Control Channel MTU parms [ L:1574 D:138 EF:38 EB:0 ET:0 EL:0 ]
- Mon Mar 15 13:03:14 2010 Data Channel MTU parms [ L:1574 D:1450 EF:42 EB:135 ET:32 EL:0 AF:3/1 ]
- Mon Mar 15 13:03:14 2010 Local Options hash (VER=V4): 'd79ca330'
- Mon Mar 15 13:03:14 2010 Expected Remote Options hash (VER=V4): 'f7df56b8'
- Mon Mar 15 13:03:14 2010 UDPv4 link local: [undef]
- Mon Mar 15 13:03:14 2010 UDPv4 link remote: 204.74.212.217:1194
- Mon Mar 15 13:03:16 2010 TLS: Initial packet from 204.74.212.217:1194, sid=3d4cf00a 84deb309
- Mon Mar 15 13:03:18 2010 VERIFY OK: depth=1, /C=US/ST=Beijing/L=BEIJING/O=xinlogs.com/CN=babodx/emailAddress=babodx@gmail.com
- Mon Mar 15 13:03:18 2010 VERIFY OK: depth=0, /C=US/ST=Beijing/O=xinlogs.com/CN=babodx/emailAddress=babodx@gmail.com
- Mon Mar 15 13:03:20 2010 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
- Mon Mar 15 13:03:20 2010 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
- Mon Mar 15 13:03:20 2010 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
- Mon Mar 15 13:03:20 2010 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
- Mon Mar 15 13:03:20 2010 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
- Mon Mar 15 13:03:20 2010 [babodx] Peer Connection Initiated with 214.174.212.217:1194
- Mon Mar 15 13:03:21 2010 SENT CONTROL [babodx]: 'PUSH_REQUEST' (status=1)
- Mon Mar 15 13:03:21 2010 PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.0 255.255.255.0,redirect-gateway,dhcp-option DNS 8.8.8.8,route-gateway 10.8.0.1,ping 10,ping-restart 120,ifconfig 10.8.0.3 255.255.255.0'
- Mon Mar 15 13:03:21 2010 OPTIONS IMPORT: timers and/or timeouts modified
- Mon Mar 15 13:03:21 2010 OPTIONS IMPORT: --ifconfig/up options modified
- Mon Mar 15 13:03:21 2010 OPTIONS IMPORT: route options modified
- Mon Mar 15 13:03:21 2010 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
- Mon Mar 15 13:03:21 2010 TAP-WIN32 device [本地连接 3] opened: .Global{A958F4F2-14AF-49E6-9FBF-4FC25B8D8786}.tap
- Mon Mar 15 13:03:21 2010 TAP-Win32 Driver Version 8.4
- Mon Mar 15 13:03:21 2010 TAP-Win32 MTU=1500
- Mon Mar 15 13:03:21 2010 Notified TAP-Win32 driver to set a DHCP IP/netmask of 10.8.0.3/255.255.255.0 on interface {A958F4F2-14AF-49E6-9FBF-4FC25B8D8786} [DHCP-serv: 10.8.0.0, lease-time: 31536000]
- Mon Mar 15 13:03:21 2010 Successful ARP Flush on interface [29] {A958F4F2-14AF-49E6-9FBF-4FC25B8D8786}
- Mon Mar 15 13:03:23 2010 TEST ROUTES: 2/2 succeeded len=1 ret=1 a=0 u/d=up
- Mon Mar 15 13:03:23 2010 route ADD 214.174.212.217 MASK 255.255.255.255 192.168.2.1
- 操作完成!
- Mon Mar 15 13:03:23 2010 route DELETE 0.0.0.0 MASK 0.0.0.0 192.168.2.1
- 操作完成!
- Mon Mar 15 13:03:23 2010 route ADD 0.0.0.0 MASK 0.0.0.0 10.8.0.1
- 操作完成!
- Mon Mar 15 13:03:23 2010 route ADD 10.8.0.0 MASK 255.255.255.0 10.8.0.1
- 操作完成!
- Mon Mar 15 13:03:23 2010 Initialization Sequence Completed
评论:
2010-05-27 22:46
正在準備… ########################################### [100%]
套件 openvpn-2.1.1-2.el5.i386 (較 openvpn-2.0.9-1.i386 版本還新) 已經安裝了
[root@abc ~]# cp -r /usr/share/doc/openvpn-2.0.9/easy-rsa/ /etc/openvpn/
cp: 無法 stat ‘/usr/share/doc/openvpn-2.0.9/easy-rsa/’: 沒有此一檔案或目錄
[root@abc ~]#
麻煩您
2010-04-08 16:33
[root@abc easy-rsa]# cp keys/ca.crt ../
cp: 無法 stat ‘keys/ca.crt’: 沒有此一檔案或目錄
[root@abc easy-rsa]# cd /etc/openvpn/easy-rsa/
[root@abc easy-rsa]# cp keys/ca.crt ../
cp: 無法 stat ‘keys/ca.crt’: 沒有此一檔案或目錄
[root@abc easy-rsa]# ./build-key-server hung
error on line 136 of /etc/openvpn/easy-rsa/openssl.cnf
27824:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:629:line 136cd /etc/openvpn/easy-rsa/
. ./vars
./clean-all
注意上面的. ./vars两个点之间有一个空格
上面这些做了吗?
还有就是./build-ca 了吗
2010-04-05 15:34
学习了