在基于OpenVZ的VPS配置OpenVPN

2010-08-24 12:26, 周二

基于OpenVZ虚拟技术的美国Linux VPS上搭建OpenVPN的一些常见问题和解决方法。与Xen所采用的虚拟方式不同,由于这只是一个系统级的虚拟,所以对物理机器上的内核系统的依赖性很强。但基本上如果能完成下面三步工作,也就离我们所要的实现不远了。

一、确定物理主机的iptables加载了ipt_state和iptable_nat模块。

租用的空间:需要联系主机商的开启支持。
检查方法:尝试在vps中添加一条iptables的nat规则。如果提示无法添加,则表示缺少该模块。
自己的机器:可以修改/etc/vz/vz.conf配置文件来加入,在文件中找到IPTABLES项及添加即可。(需要重启openvz生效)
默认为:
IPTABLES=”ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length”
修改为
IPTABLES=”ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ipt_state iptable_nat”

二、确定vps支持了tun/tap。

租用的空间:需要联系主机商的开启支持。
检查方法:使用命令查看相关块设备 #cat /dev/net/tun。返回“/dev/net/tun: File descriptor in bad state” 表示设备可用;返回“/dev/net/tun: No such device” 表示设备不可用。
自己的机器: 可通过下列命令来添加支持。

允许相应的vps使用 tun/tap设备:
#vzctl set veid --devices c:10:200:rw --save
#vzctl set veid --capability net_admin:on --save

在相应的vps中创建字符设备文件:
#vzctl exec veid mkdir -p /dev/net
#vzctl exec veid mknod /dev/net/tun c 10 200
#vzctl exec veid chmod 600 /dev/net/tun

如果出现无法添加的情况,请先检查物理主机上是否已经加载了相关的模块。方法如下:
#lsmod | grep tun        //查看模块是否加载
#modprobe tun           //未加载则加之

完成以上操作后需要重启vps来生效。

三、在linux vps中添加iptables规则。

iptables -t nat -A POSTROUTING -j SNAT -o venet0 -s ! x.x.x.x --to-source x.x.x.x
如果iptables拥有多条规则,请确保此条规则放置在首位。x.x.x.x代表该vps的外网ip。
或者使用:
iptables -t nat -A POSTROUTING -s x.x.x.x/24 -o venet0 -j MASQUERADE
x.x.x.x代表该vpn的私有网络地址;MASQUERADE表示将来自私有网络的地址伪装成vps可用的外网地址。相对于第一条规则稍占些资源,因为在转换之前需要先寻找可用的外见地址。

到此准备工作完成。最后就是下载安装OpenVPN Access Server就行啦。

服务器编译安装配置及客户端配置与一般VPN相同,不再赘述,CentOS用户可以看这篇文章:《CentOS5下安装OpenVPN》

这里仅说明不同的地方,第三部分OpenVPN访问外网的设置请按以下操作:

打开转发:

echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/sysctl -w net.ipv4.ip_forward=1

配置iptables转发规则(注意加黑的部分,加在rc.local里,保证重启之后还有效):

/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE

再需要注意的是,虽然 openvpn服务监听的是*:1194,但是如果设置的UDP方式,则只能用你的主IP来连接,其它IP连接不上。

另外:

如果想一次性清除系统的iptables规则,可用命令:
#iptables -F                       //清除常规链表
#iptables -t nat -F           //清除nat表

如果遇到 FATAL: Could not load /lib/modules/2.6.18-128.2.1.el5.028stab064.7/modules.dep: No such file or directory的错误提示,创建一个相应的空文件一般即可避免该提示。

标签: , , ,

发表评论

您需要 登陆 以后才能发表评论.