openvz vps ubuntu 安装 openvpn 并配置iptables

作者: lesca 分类: Tutorials,Ubuntu,VPN 发布时间: 2011-06-23 23:10

一、准备工作

对于买了openvz vps,想开立vpn的朋友们,首先应该发送Ticket联络你的提供商,开启TUN/TAP和iptables相关的模块,并开启ip_forward转发功能。请根据以下步骤进行检查:

1.iptalbes

至少开启以下函式:

# cat /proc/net/ip_tables_names
mangle
filter
nat

相关链接

有关iptalbes的介绍,请参看Lesca博客的这篇文章

2.TUN/TAP

执行命令

cat /dev/net/tun

如果结果为

cat: /dev/net/tun: No such file or directory

则说明tun设备没有正确安装,请发ticket与你的VPS提供商联系安装。
如果结果是

cat: /dev/net/tun: File descriptor in bad state

则tun设备很有可能正确安装了(但是不能保证)

3.ip_forward

echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
sysctl -p

如果报错,则还未开启。须联系VPS管理员

4.安装OpenVPN

apt-get update
apt-get install openvpn openssl

二、服务器端证书配置

1.复制easyrsa管理工具

cd /etc/openvpn/
cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/easy-rsa/2.0/

2.配置证书基本信息

执行vi vars编辑vars变量,主要修改以下几行:

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"

编辑完毕后,保存一下

3.生成证书文件

载入环境变量:

source vars 

清空旧的证书文件,初始化证书数据库

./clean-all 

生成DIFFIE-HELLMAN参数,用于TLS连接

./build-dh 

生成CA根证书

./pkitool --initca 

生成服务器端密钥及证书

./pkitool --server server 

生成客户端证书

./pkitool client1

4.复制到服务器端配置目录

cd keys
cp  ./{ca.crt,server.crt,server.key,dh1024.pem} /etc/openvpn/

三、服务器端配置文件

1.编辑openvpn配置文件

vi /etc/openvpn/openvpn.conf

用下面的内容替换原来的内容

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
cipher AES-256-CBC
tls-cipher AES256-SHA
keysize 256
dh dh1024.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
ifconfig-pool-persist ipp.txt
duplicate-cn
keepalive 10 120
client-to-client
comp-lzo
comp-noadapt
fragment 1300
mssfix 1300
sndbuf 20480
rcvbuf 20480
user daemon
group daemon
persist-key
persist-tun
status openvpn-status.log
verb 3

不清楚这些选项的意义?没有关系,我们现在不需要知道那么多。
有关配置文件的说明,请留意Lesca博客近期发表的文章。

2.重启服务

为了让配置生效,需要重启服务

/etc/init.d/openvpn restart

四、客户端配置

1.获取证书

请使用安全的方法,将client1.crt, client1.key, ca.crt 复制到客户端计算机

2.配置文件

client
remote x.x.x.x 1194
dev tun
comp-lzo
comp-noadapt
mute-replay-warnings
ca ca.crt
cert client1.crt
key client1.key
cipher AES-256-CBC
tls-cipher AES256-SHA
keysize 256
fragment 1300
sndbuf 20480
rcvbuf 20480
verb 3

其中x.x.x.x是服务器端的IP地址。编辑完成后,保存为xxx.ovpn

3.连接测试

请确保客户端配置文件和证书在同一目录,并进入该目录,执行:

sudo openvpn --config xxx.ovpn

其中xxx.ovpn为客户端配置文件名。
如果出现Initialization Sequence Completed则表示连接成功,但是此时仍然无法访问外网,请到第五、六节继续配置;如果出现错误消息,请根据错误消息做进一步配置。

Windows下进行连接

请到官网下载windows客户端:
http://openvpn.net/index.php/open-source/downloads.html

五、服务器端网络配置

1.开启网络转发

编辑 /etc/sysctl.conf,修改net.ipv4.ip_forward为:

net.ipv4.ip_forward=1

然后使设定生效

sysctl -p

六、服务器端iptables配置

1.清空iptables规则

开始配置防火墙了,先清空防火墙现有的设置,遇到错误,不用管它,进行下一个操作。

iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -F
iptables -X
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t raw -F
iptables -t raw -X
iptables -t raw -P PREROUTING ACCEPT
iptables -t raw -P OUTPUT ACCEPT

2.设置防火墙,允许nat,端口转发和常用的服务

需要注意的是第一行的-o venet0 在openvz下面是venet0,在xen下面可能是eth0,这是网卡的编号,大家可以用ifconfig查看,看第一块网卡是eth0还是venet0,不要搞错了,搞错了就访问不了外面的互联网。

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE
 
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT
 
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
 
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination 8.8.8.8
 
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -s 10.8.0.0/24 -p all -j ACCEPT
iptables -A FORWARD -d 10.8.0.0/24 -j ACCEPT
 
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
 
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
 
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source x.x.x.x

其中x.x.x.x是你VPS的IP地址

3.保存防火墙规则,让它在下次启动系统时自动生效

iptables-save > /etc/iptables.up.rules

新建网络启动时加载的脚本

vim /etc/network/if-pre-up.d/iptables

输入下面的内容

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

改变执行权限

chmod a+x /etc/network/if-pre-up.d/iptables

等下次你启动连接的时候,防火墙就会以现在的规则执行。

References:
[1] OpenVZ VPS搭建PPTP VPN的方法
[2] openvz vps ubuntu 安装 openvpn 并配置iptables防火墙
[3] RSA Key Management
[4] Diffie–Hellman key exchange

版权声明

本文出自 Lesca 技术宅,转载时请注明出处及相应链接。

本文永久链接: https://www.lesca.cn/archives/install-openvpn-and-config-iptables-on-openvz-vps-ubuntu.html

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

8 Comments
  • 林海草原

    2011-06-24 at 13:29

    我原来以为这个会因为系统的不同而不同,看了却发现,基本都是相同的。

    1. lesca

      2011-06-29 at 09:23

      因为都是Ubuntu嘛,主要难就在iptables防火墙规则还有证书管理上面

  • 杜小白

    2012-08-06 at 21:04

    我想问,VPS的防火墙设置会引起连接不成功么?我的OPENVPN已在WIN7里连接成功,变成绿色了,但是却显示无INTERNET访问权限。想问博主愿意有偿帮忙解决关于OPENVPN的问题么?

    1. lesca

      2012-08-07 at 09:40

      不正确地配置防火墙可能导致无法上网。主要是应该检查你的VPS是否启用了“转发”功能。你可以按照“准备工作”一节中的方法进行检查。如果iptables工作正常,那么还要确保加入了MASQUERADE规则。

      1. 杜小白

        2012-08-07 at 10:17

        我找到原因了··是因为VPS分配了IPV6的原因,你说的转发功能,和IPTABLES,我都做了的。现在的解决办法就只是重装OPENVPN的内测版2.3 .

        1. lesca

          2012-08-07 at 13:10

          我的VPS也有Global Scope的IPv6地址,但是工作正常。OpenVPN版本为2.2.1,操作系统Ubuntu 12.04 LTS

          1. 杜小白

            2012-08-07 at 14:24

            我客户端用的是OPENVPN 2.2.2,但服务器装的是哪个版本的就不记得了。现在的确不会弄了,只好重装一次,打算服务器和客户端都用内测版的。我的操作系统为CENTOS 5.5

  • 杜小白

    2012-08-07 at 14:28

    服务器的,好像是2.0.9的。