menu

精英意识会让人走向孤独

忘记社区密码或者保密贴查看密码的,请给我留言,并留联系方式。

Avatar

在VPS内安装配置OpenVPN用于翻墙的前提条件

很多服务商开设了香港主机、美国主机,提供VPS服务
其中有用Parallels Virtuozzo Containers商业版本的,VPS价格较贵
有的用OpenVZ免费版本的,VPS价格就很便宜
还有用Xen自己搭建的,VPS价格适中
那么这些国外VPS,经常被用户问及如何在VPS内安装OpenVPN等VPN服务,用来翻墙
但是,在默认情况下,基于Parallels Virtuozzo Containers/OpenVZ的VPS内是无法运行VPN的
需要运营商的系统管理员在宿主服务器上做一系列的配置方可
我Google了一下英文和中文的,貌似都没有太完整的帖子
所以从头写了一个完整版,任何一个运营商照猫画虎运行几个命令就可以跑VPN了!

点击这里看公司的知识库

同时,我也把公司原来的OpenVPN服务从一个独立的物理服务器上
成功迁移到一个VPS内了
经测试运行正常

在VPS内安装OpenVPN,或遇到两大问题:
1) OpenVPN所调用的/dev/net/tun设备无法启动,即VPS内没有加载tun内核模块
2) OpenVPN需要进行NAT地址转换,但VPS内的iptables没有加载iptables_nat模块

这两个问题是因为VPS所在的宿主服务器没有加载需要的内核模块和配置
导致OpenVPN依存的设备和模块不能调用
由于VPS是有自身安全保护的,因此VPS的用户自己无法进行配置操作
需要联系VPS服务商,请服务商的系统管理员登录到宿主节点
在宿主节点上按照下列流程执行配置
解决这两个问题后,在VPS内运行OpenVPN就畅通无阻了!

首先登录到硬件节点,添加Tun模块

1) 停止所有VPS
/etc/init.d/vz stop

2) 执行查看是否已经加载了tun模块
lsmod | grep tun
如果没有输出任何内容,则表明没加载
在Parallels Virtuozzo Container for Linux 4.0版本上,默认内核是不加载的

3) 执行下列命令加载tun内核模块
modprobe tun
然后再运行一次lsmod | grep tun命令应该可以看到输出内容了

4) 添加iptables模块到宿主系统的内核
vi /etc/sysconfig/iptables-config
编辑这个文件,其中有一段IPTABLES_MODULES=这里是表明加载了那些模块
把要加载的模块都列入进去,例如:
IPTABLES_MODULES="ipt_REJECT ipt_tos ipt_TOS ipt_LOG ipt_limit ipt_multiport iptable_filter
iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ipt_state iptable_nat ip_nat_ftp"
注意这个配置文件可以直接换行的,每个模块中间都用空格分开几个
编辑完成后保存退出

5) 重新加载iptables服务
/etc/init.d/iptables restart

6) 现在可以把vz服务启动起来,开始配置Container了
/etc/init.d/vz start
命令执行之后,所有VPS都会依次启动起来

7) 将要配置OpenVPN的VPS先停止掉,例如ID是101,则运行
vzctl stop 101
因为这里如果不停止VPS,后边的几个命令都无法加载到一个正在运行的Container上

8) 配置tun设备
前边已经把内核模块tun加载到宿主机的内核了,用如下命令允许vps内部调用它
vzctl set 101 --capability net_admin:on --save
vzctl set 101 --devices c:10:200:rw --save
注意上边两个命令先后顺序不能错

9) 设置iptables允许使用的模块
vzctl set 101 --iptables ipt_REJECT --iptables ipt_tos --iptables ipt_TOS \
--iptables ipt_LOG --iptables ipt_limit --iptables ipt_multiport \
--iptables iptable_filter --iptables iptable_mangle --iptables ipt_TCPMSS \
--iptables ipt_tcpmss --iptables ipt_ttl --iptables ipt_length \
--iptables ipt_state --iptables iptable_nat \
--iptables ip_nat_ftp --save

10) 增大这个VPS的iptables资源参数,以免iptables池被用光
vzctl set 101 --numiptent 400 --save

11) 现在可以启动这个VPS了
vzctl start 101

12) 在VPS启动后继续执行配置
先删除现有tun设备符号
vzctl exec 101 rm -f /dev/net/tun
确认目录是否存在,不存在建立一下
vzctl exec 101 mkdir -p /dev/net
在VPS 101内建立tun设备符号
vzctl exec 101 mknod /dev/net/tun c 10 200
分配正确权限
vzctl exec 101 chmod 600 /dev/net/tun

13) 至此全部配置完成!
运行/etc/init.d/openvpn start 看看是不是已经能正常启动OpenVPN了!
如果遇到启动失败,检查/var/log/message看错误详细原因

14) 需要注意,在VPS内部,网卡不叫eth0,而是叫做venet0
请修改自己的iptables规则,注意不要用错网卡的名称

本文方法在2010年3月17日经Parallels Virtuozzo Containers 4.0版本验证通过
已验证OpenVPN拨号成功建立连接,NAT地址转换正常,可向外正常访问
内核版本:Linux yfvz.valueof.com 2.6.18-028stab062.3 #1 SMP Thu Mar 26 14:42:14 MSK 2009 i686 i686 i386 GNU/Linux
宿主系统:Red Hat Enterprise Linux AS release 3 (Taroon Update 4)
VPS系统:Red Hat Enterprise Linux Server release 5.1 (Tikanga)
VPS内运行的OpenVPN版本:openvpn-2.1-0.19.rc4
VPS内运行的iptables版本:iptables-1.3.5-1.2.1

该文章解决了困扰广大VPS运营商的老大难问题。