以下内容为个人配置笔记,仅供参考,请勿用于生产环境
其实本人对vpn服务的搭建比较陌生,主要参考的还是这篇文章http://freshventure.wordpress.com/2009/12/22/在ubuntu上搭建openvpn服务器,并配合mac和windows的客户端/(需要翻墙)
在这里重新撰写一篇算是备份外加自己的整理,在最后还有一篇关于搭建ssh反向代理服务的简单说明。
首先安装openvpn:
sudo apt-get install openvpn
然后拷贝ca证书,server证书和client证书的生成脚本到我们自己的配置路径下,还有样例的服务器配置文件也解压一份,捣鼓一番:
cd /etc/openvpn/
sudo cp -af /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn
gzip -d server.conf.gz
进入/etc/openvpn/easy-rsa开始生成根证书、服务器证书、和客户端证书,注意这一步最好以root身份执行,证书生成完了后把ca证书也就是根证书和你个人的客户端证书和私钥拿出来即可:
切换到root身份:
cd /etc/openvpn/easy-rsa/
sudo -sH
清理环境构建配置目录:
source ./vars
./clean-all
构建CA根证书,回答该回答的问题,国家代号和省一级的代号都是两个字符,中国是CN,当然你设个不存在的地方也没人来找你,不建议设置密码:
./build-ca
构建服务器证书,回答该回答的问题,不建议设置密码:
./build-key-server server
构建个人证书也就是客户端证书,建议设置密码:
./build-key client1
命令中的client1为你个人证书的名字可以随便,比如nick,axiong,chunge,lurenjia等等。
然后构建Diffie Hellman参数,这部可能要花几分钟时间生成随机数,你如果对安全比较在意可以在vars里设置为2048位的,这些主要是非对称加密算法里用来保证安全用的。
./build-dh
在这些证书都生成完成后建议退出root身份。
在证书啥的都搞定了后可以开始搞服务器配置了:
sudo vi /etc/openvpn/server.conf
服务器的配置没啥好多说的,偶这里就灰常没牙齿的拷贝一下freshventure的注释版,改改并加上收集来的资讯,适应我的配置了:
# 写入你vps的公网ip地址 local 64.233.189.104 # openvpn监听的端口,你也可以改为别的 port 1194 # tcp or udp, never use both in the same config # tcp不会丢包,udp则不太靠谱 proto tcp #routed VPN #否则需要配置bridge模式,很麻烦 #除非在服务器侧有很多其他windows主机要共享,否则 dev tun # Certificates,这些都是刚才生成的文件 ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/server.crt key /etc/openvpn/easy-rsa/keys/server.key # This file should be kept secret dh /etc/openvpn/easy-rsa/keys/dh1024.pem # Server settings,一般就用默认设置比较好,避免和本地局域网地址重复 # 这里默认是设置在10.8.0.0这个网段作为你的vpn私域网络地址段 server 10.8.0.0 255.255.255.0 # Default VPN ip range. #这句很关键,让客户端所有路由都转从VPN的默认网关 #def1也不能少,否则有时候客户端的默认网关不会变 push "redirect-gateway def1 bypass-dhcp" # OpenDNS settings,也很关键。 #因为为客户端连DNS查询都通过VPN发出。 #当然如果你愿意也可以使用google的DNS服务 8.8.8.8 和 8.8.4.4 push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" # 允许两个客户端之间可见,如果注释掉则客户端只能连接服务器,之间看不到 client-to-client # 允许一个证书多处同时登录,不建议使用,注意此处阿熊是注释掉的 ;duplicate-cn # 启用压缩,对时延影响不大 # 注意客户端配置的时候注意与服务器保持一致 comp-lzo # Reduce the OpenVPN daemon's privileges user nobody group nogroup keepalive 10 120 #以下几个对连接建立影响不大 ifconfig-pool-persist ipp.txt #日志也可以改到/var/log/openvpn/下 status openvpn-status.log # 这里可以打开本地设置的日志 # 如果你等会儿服务无法开启,可以在这里的日志中检查故障原因 ;log-append openvpn.log # Set the appropriate level of log # file verbosity. # # 0 is silent, except for fatal errors # 4 is reasonable for general usage # 5 and 6 can help to debug connection problems # 9 is extremely verbose verb 3
在启动你的openvpn服务之前我们还需要搞定几件事情:
1打开你的服务器的ipv4协议的网络封包转发功能:
sudo vi /etc/sysctl.conf
找到并将其中net.ipv4.ipforward=1的注释去掉:
net.ipv4.ipforward=1
想要服务器重启前立刻生效这个设定,执行命令:
sudo sysctl -w net.ipv4.ip_forward=1
启动服务前记得你的iptables上为这个网段打开路由nat转发。
注意vps(openvz)等技术里的设定和实体服务器或者vmware之类的虚拟技术的设置方法不太相同,
比如实体服务器有一块网卡eth0,设置方法基本上符合freshventure原文中的描述:
#假设服务器只有一块网卡eth0,所以无论是接收VPN请求,和向外二次转发,都用eth0这个interface
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE #VPN向Internet转发的关键
iptables -A INPUT -i tun+ -j ACCEPT #必须可以接收tun0转来的VPN内部数据包
iptables -A INPUT -i tap+ -j ACCEPT #这条主要是为了Window客户端OpenVPN GUI登录所设置的,因为其只有tap接口
iptables -A FORWARD -i tap+ -j ACCEPT #允许VPN转发
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 1194 -j ACCEPT #允许客户端递交VPN登录请求
但是在vps(openvz)的服务器上貌似MASQUERADE已经不管用了,
去掉这条:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE #VPN向Internet转发的关键
加上阿熊的这条:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to 64.233.189.104
其中64.233.189.104是你vps的公网ip地址。
另外记得将末尾那条规则的eth0换成你vps的venet0或者其他什么名字,主要看你的主机商在/etc/network/interfaces中的设置。
iptables -A INPUT -p tcp -i eth0 --dport 1194 -j ACCEPT #允许客户端递交VPN登录请求
最后服务启动:
sudo /etc/init.d/openvpn start
看到'server'启动成功的话就算是大功基本告成。
openvpn的客户端的话各个系统不一,可以在这里openvpn.net/gui.html找到你系统的解决方案。
ubuntu的用户只需要:
sudo apt-get install network-manager-openvpn
即可,当然注意你的发行版,我的是9.10没有问题,旧版的network-manager-openvpn可能会有些bug。可以参考这篇文章中的设置http://hi.baidu.com/hy0kl/blog/item/b55a97af351c8ec77dd92a5d.html
windows的用户选择貌似只有 openvpn GUI,可以编写这样一个client.ovpn文件:
client dev tun proto tcp #hand-window 15 #remote-random remote 64.233.189.104 1194 resolv-retry infinite nobind # Try to preserve some state across restarts. persist-key persist-tun ca ca.crt cert client1.crt key client1.key # 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
所有的openvpn客户端都需要ca.crt,client1.crt,client1.key这3个文件,刚生成的时候都保存在/etc/openvpn/easy-rsa/keys路径下,需要root身份进入。
有新的客户端证书需要生成了只需要进入/etc/openvpn/easy-rsa再次 ./build-key client2等等即可。如果你有多台服务器也可以再build一份server配置。客户端配置文件可以选择多个server,看看上面的.ovpn文件你懂的。
ssh反向代理:
如果仅仅是需要做浏览器反向代理的话:
linux下可以一条命令:
sudo /usr/bin/ssh -qTfnN -p 22 -D 7070 client@64.233.189.104
其中:
7070为你本地监听的端口,
client为你服务器上的账户名,
64.233.189.104为你服务器的ip,
当然后面两项你也可以使用证书代替。
执行后输入你服务器上账户的ssh密码即可。
windows用户可以去下个putty的组件plink.exe
做个批处理命令:
plink.exe -C -D 127.0.0.1:7070 -N -pw 123456 client@64.233.189.104
其中:
7070为你本地监听的端口,
123456为你服务器上账户所对应的ssh密码,
client为你服务器上的账户名,
64.233.189.104为你服务器的ip,
这样就建立了一个127.0.0.1:7070的本地socks代理,在你的浏览器里设置一下即可。
当然如果您仅仅是为了浏览,其实用不着vps随便买个带ssh的国外虚拟主机即可,比vps便宜,淘宝上现在也有很多直接卖ssh帐号的也可以用这个方法登录构建,而且更便宜。
如果你只想给你朋友开通仅ssh反向代理功能的账户可以这么做:
在你的vps/主机上执行:
sudo useradd -M -N -g nogroup -d /nonexistent -s /usr/sbin/nologin client1
其中client1为你朋友的账户名
sudo passwd client1
为这个账户设置个密码。
ok,搞定了,然后你朋友就可以以这个代理去访问墙外的世界了。
PS:
发发怨气,本来好好的国内网络,高速又高效,现在好了,被这群人渣整的乌烟瘴气,被逼着用脚投票,搬出来,多费我这么多银子耗在争取信息自由上,这样也好,那就不妨多分享一些信息传播的技术资料,让更多的不明真相变得明白。
当年的ultravpn是免费的不过尽管这一伟大的产品为了中国的客户群做了很多努力(https://www.ultravpn.fr/forum/index.php?topic=195.0 这条是置顶的帖子,我对管理员肃然起敬)但依然挡不住网特们的勤劳河蟹,我诅咒这些龟孙子都小鸡鸡长脸上&祖祖辈辈。
有了你自己的国外vpn记得为你国内明真相和不明真相的信得过的朋友也开通个客户端证书或者ssh代理账户吧,流量可以大家分担,但不要做被人欺辱还要说他教你的那些好话的S13。

得空试一试先。
allankliu Says @ 10-03-18 13:58
赞!
硬盘被格 Says @ 10-03-18 17:31
确实还不错啊 这个东东
时尚女性网 Says @ 10-05-22 22:27
报告,
清理环境构建配置目录:
source ./var
这里应该是 ./vars ?
oppih Says @ 10-10-20 14:23
好的,谢谢,已修正。