全球主机交流论坛

标题: openvz vps ubuntu 安装 openvpn 并配置iptables防火墙 [打印本页]

作者: netroby    时间: 2010-4-30 17:33
标题: openvz vps ubuntu 安装 openvpn 并配置iptables防火墙
更新记录:
2010/05/01
第二版发布,小修正openvpn的配置,解决通过vpn上网的掉线问题,现在己经可以非常稳定的工作。不会出现开网页会时不时的抽风的现象
2010/04/30
第一版发布,完成整个配置流程
---------------------------------------------------------------------------------------------------------------------------

对于买了openvz vps,想开立vpn的朋友们,首先应该发送Ticket联络你的提供商,开启TUN/TAP和iptables相关的模块,并开启iptables相关的组件。

    我们先检测下是否己经有开通tun和tap,检测是否开启tun功能的方法是:
    lsmod | grep tun


    如果没有显示, 再试试下面的命令

  
modprobe tun


    这种检测手段并不很准确,为了保险起见 ,你还是联系下提供商,记住,一 定要开启TUN/TAP和iptables相关组件,不然配置会不成功。

    等待提供商为你开启了相关功能后,下面就正式动手进行配置了。

    以下命令都是在命令行进行手动敲入的,因为自动化脚本并不能解决在安装openvpn过程中遇到的各种小问题,所以需要手动来配置,才能最后让 openvpn正常运作。所以请大家耐心的进行复制粘贴。出现了错误,仔细分析前因后果。

    记住需要使用到的常量,在下面输入的时候,要记得用这些变量的值,替换变量,不要原封不动的复制粘贴代码。

    $HOSTNAME 你的vps服务器的机器名,可输入hostname命令获取

    $IP 你vps对外的IP地址,公网IP,可输入ifconfig查询。

    服务器安装配置

    安装openvpn开始,先更新下源
    apt-get update


    安装openvpn和必须的类库
    apt-get install openvpn libssl-dev  openssl


    转到openvpn的配置文件夹

    cd /etc/openvpn/


    拷贝工具过来,准备生成Key
    cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/


    进入工作目录

  cd /etc/openvpn/easy-rsa/2.0/


    改变文件可执行状态
    chmod +rwx *


    编辑配置文件,修改默认用户信息 vim ./vars

    找到下列内容进行替换成你自己的,比如国家可以自US改成CN
    export KEY_COUNTRY=“US”

    export KEY_PROVINCE=“CA”

    export KEY_CITY=“SanFrancisco”

    export KEY_ORG=“Fort-Funston”

    export KEY_EMAIL=“[email protected]


    编辑完毕后,保存一下,执行下面的命令

    source vars

    ./clean-all

    ./build-dh

    ./pkitool --initca

    ./pkitool --server server

    进入key目录

    cd keys


    生成key
    openvpn --genkey --secret ta.key

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


    编辑openvpn配置文件 vim /etc/openvpn/openvpn.conf

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

    proto udp

    dev tun

    ca ca.crt

    cert server.crt

    key server.key

    dh dh1024.pem

    server 10.8.0.0 255.255.255.0

    push “redirect-gateway def1”

    push “dhcp-option DNS 8.8.8.8”

    push “dhcp-option DNS 8.8.4.4”

    ifconfig-pool-persist ipp.txt

    keepalive 10 120

    client-to-client

    comp-lzo

    user daemon

    group daemon

    persist-key

    persist-tun

    status openvpn-status.log

    verb 3

    配置文件保存后,现在开始配置网络相关设置,先开启转发功能

   echo “net.ipv4.ip_forward=1” 》 /etc/sysctl.conf


    使设定生效

   
sysctl -p


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

  
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

    设置防火墙,允许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 -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-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


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

    现在既然配置都己经好了,那就重启openvpn服务吧

  
/etc/init.d/openvpn restart

    客户端配置文件

  cd /etc/openvpn/easy-rsa/2.0/

    source vars

    ./pkitool client1

    cd keys/


    编辑客户端配置文件 vim $HOSTNAME.ovpn

    输入下面的内容

   
client

    remote $ip 1194

    dev tun

    comp-lzo

    ca ca.crt

    cert client1.crt

    key client1.key

    route-delay 2

    route-method exe

    redirect-gateway def1

    dhcp-option DNS 10.8.0.1

    verb 3


    注意把上面的$ip,$HOSTNAME变量替换为真实的主机名和IP地址,不得有误

    打包密匙,供客户端使用

  
tar -zcvf  keys.tar.gz ca.crt ca.key client1.crt client1.csr client1.key ta.key $HOSTNAME.ovpn

    移动到Root的主目录下面

  
mv keys.tar.gz ~/


    你可以用Winscp等软件,把这个下载回来。解压放到你的openvpn目录下面使用

    这些密匙和配置文件是放在C:\Program Files\OpenVPN\config 下面,需要使用vpn的时候,点开openvpn,直接connect即可。

    客户端我们用的是openvpn gui工具,在windows下面可以很方便的连接openvpn服务器上。

    在服务器端己经启动了,我们就可以用GUI工具进行连接了,右键点击托盘栏的小图标,启动connect即可连接vpn了。

    参考资料

    http://vpsnoc.com/blog/how-to-in ... untu-vps-instantly/

    http://openvpn.se/download.html

    https://help.ubuntu.com/9.10/serverguide/C/openvpn.html

    http://www.douhua.im/2010/01/06/ ... all-openvpn-server/

原文链接:http://www.netroby.com/article-1565.html (高清详细版)

[ 本帖最后由 netroby 于 2010-5-1 09:03 编辑 ]
作者: Rey    时间: 2010-4-30 18:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: netroby    时间: 2010-4-30 18:37
在openvz和xen下面完美通过。
作者: qiqi13245    时间: 2010-4-30 18:41
还是centos好
作者: WAKAKA    时间: 2010-4-30 19:07
84 上 centos从来没成功过
作者: netroby    时间: 2010-5-1 09:05
经过摸索和尝试,己经比较好的解决openvpn下面vpn连接不稳定的工作状态,现在看网页,看视频,响应速度己经有了很明显的提升。

求版主或管理员加个精或置个顶吧。也算是对技术开源的一种帮扶和支持。
作者: ccp    时间: 2010-5-1 09:25
不知道你怎么测试的。。
openvz是无法使用MASQUERADE的。。
作者: netroby    时间: 2010-5-1 09:52
原帖由 ccp 于 2010-5-1 09:25 发表
不知道你怎么测试的。。
openvz是无法使用MASQUERADE的。。

请联系提供商为你开通。如果你的提供商不愿意提供,那就是他的不作为。
quickweb很乐意帮助用户开通openvz的iptables模块。我己经写的很清楚明白了。
需要tun/tap和iptables相关模块的支持。提供商应该知道需要开启哪些。如果他们不知道,只能证明他们的服务和支持力量不到位。

需要开启的iptables模块至少需要NAT,MASQUERADE
作者: netroby    时间: 2010-5-1 09:53
参见openvz的官方说明,需要iptables完整的模块,提供商必须自行加载相关模块。
作者: ccp    时间: 2010-5-1 11:45
原帖由 netroby 于 2010-5-1 09:52 发表

请联系提供商为你开通。如果你的提供商不愿意提供,那就是他的不作为。
quickweb很乐意帮助用户开通openvz的iptables模块。我己经写的很清楚明白了。
需要tun/tap和iptables相关模块的支持。提供商应该知道需要开启哪 ...



说了MASQUERADE不能的。。。只有SNAT和DNAT是支持的。真的,好好测试好再发布,误人子弟。。
http://forum.openvz.org/index.php?t=msg&goto=8117
作者: netroby    时间: 2010-5-1 13:03
如果你真的要说不行,我也没办法。刚才又重新配置了一台位于softLayer西雅图数据中心的openvz VPS.
不知道你有什么证据证明我是误人子弟。
你的逻辑好象:我配置不成功,写教程的人一定是骗子。误人子弟。

不懂怎么弄不可耻,可耻的是不懂得尊重他人。
作者: netroby    时间: 2010-5-1 13:05
这个教程己经在四台vps,三个数据中心, xen和openvz下面成功配置openvpn.
如果你还要说我的教程写错了,那我无话可说。

为什么我可以按照我的教程所写,成功配置openvpn呢?
作者: 炎羽    时间: 2010-5-1 13:07
用过一次,主要是管理员太菜不会开tun和nat转发,所以就没成功
作者: netroby    时间: 2010-5-1 13:08
还有,这个贴子并不是官方正式的公告。你看了这个贴子,听见openvz的用户们在讨论说MASQUERADE不能用。你就以为官方真的不能用,那为何不见官方的人出来说?
没有官方的说明你也不去求证下,就来这里抨击我?
我己经告诉你可以开启。那就是说我己经亲自试验过了。确实可以。你有证据证明我的错误吗?
就凭这贴子?
作者: ccp    时间: 2010-5-1 13:45
烦不烦阿。还要我揪一个官方文档

http://kb.parallels.com/en/6816

virtuozzo是不可以的,意味着openvz也是不行的。。。
作者: ccp    时间: 2010-5-1 13:45
外加可以提供一个支持的VPS商出来。。
作者: netroby    时间: 2010-5-1 13:58
quickweb
作者: surftheair    时间: 2010-5-1 14:00
iptables -t raw -X

iptables v1.3.5: can't initialize iptables table `raw': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
作者: netroby    时间: 2010-5-1 14:04
明白了,你属于光看不练的那类。
不试怎么知道行还是不行。

与其辛苦找论点来驳叱,何不自行一试?
为什么我能行?
作者: netroby    时间: 2010-5-1 14:05
iptables -t raw -X

iptables v1.3.5: can't initialize iptables table `raw': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

这一步是清空iptables前面的设置, 出现这个提示可以忽略,不妨碍后面的安装过程。
作者: netroby    时间: 2010-5-1 14:07
MASQUERADE 选项在quickweb家的openvz  vps上可以无错设置。
莫非他们技高一筹,能人所不能?
作者: netroby    时间: 2010-5-1 14:11
标题: 有图为证
root@sea:~# cat /proc/net/ip_tables_targets
REDIRECT
TCPMSS
LOG
TOS
REJECT
DNAT
SNAT
ERROR
MASQUERADE

(, 下载次数: 6)
作者: netroby    时间: 2010-5-1 14:12
看到MASQUERADE没?
这是位于西雅图SoftLayer数据中心的Quickweb家的openvz vps。
如果你连这个也不信,那我不知道要拿什么来启发你。
作者: ccp    时间: 2010-5-1 14:13
好吧。我错了。VZ是可以有的。但是不是所有VPS商都提供的。。所以呢。最好还是snat
作者: surftheair    时间: 2010-5-1 14:14
我的两个VPS都没有MASQUERADE,请问怎么开启?
作者: ccp    时间: 2010-5-1 14:15
原帖由 surftheair 于 2010-5-1 14:14 发表
我的两个VPS都没有MASQUERADE,请问怎么开启?



话说还是用snat吧。。一般的vps商不会给你开的。。。。
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to VPS公网IP
作者: netroby    时间: 2010-5-1 14:17
求真务实的说,如果空间商允许你架设vpn,同时服务不错的话,应该会给你开。如果按CCP的说法,那QuickWeb一定是极品中的极品了。
作者: ccp    时间: 2010-5-1 14:20
原帖由 netroby 于 2010-5-1 14:17 发表
求真务实的说,如果空间商允许你架设vpn,同时服务不错的话,应该会给你开。如果按CCP的说法,那QuickWeb一定是极品中的极品了。


我看了看具体的载入方法。就是vm启动命令后面配置iptables的地方加入需要的模块即可。。基本所有VPS商都允许VPN吧,不存在这么一说。。总之QuickWeb不喜欢。
作者: netroby    时间: 2010-5-1 14:20
标题:   iptables中snat和MASQUERADE的区别
  iptables中可以灵活的做各种网络地址转换(NAT)

  网络地址转换主要有两种:snat和DNAT

  snat是source network address translation的缩写

  即源地址目标转换

  比如,多个PC机使用ADSL路由器共享上网

  每个PC机都配置了内网IP

  PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip

  当外部网络的服务器比如网站web服务器接到访问请求的时候

  他的日志记录下来的是路由器的ip地址,而不是PC机的内网ip

  这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了

  所以叫做snat,基于源地址的地址转换

  DNAT是destination network address translation的缩写

  即目标网络地址转换

  典型的应用是,有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip

  互联网上的访问者使用公网ip来访问这个网站

  当访问的时候,客户端发出一个数据包

  这个数据包的报头里边,目标地址写的是防火墙的公网ip

  防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip

  然后再把这个数据包发送到内网的web服务器上

  这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了

  即DNAT,基于目标的网络地址转换

  MASQUERADE,地址伪装,在iptables中有着和snat相近的效果,但也有一些区别

  但使用snat的时候,出口ip的地址范围可以是一个,也可以是多个,例如:

  如下命令表示把所有10.8.0.0网段的数据包snat成192.168.5.3的ip然后发出去

  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j snat --to-source 192.168.5.3

  如下命令表示把所有10.8.0.0网段的数据包snat成192.168.5.3/192.168.5.4/192.168.5.5等几个ip然后发出去

  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j snat --to-source 192.168.5.3-192.168.5.5

  这就是snat的使用方法,即可以NAT成一个地址,也可以NAT成多个地址

  但是,对于snat,不管是几个地址,必须明确的指定要snat的ip

  假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变

  而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址

  这个时候如果按照现在的方式来配置iptables就会出现问题了

  因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的

  每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip

  这样是非常不好用的

  MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT

  比如下边的命令:

  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

  如此配置的话,不用指定snat的目标ip了

  不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做snat出去

  这样就实现了很好的动态snat地址转换
作者: ccp    时间: 2010-5-1 14:21
这个早就讨论过了。。SNAT适合VPS,VPS给的IP都是静态的,省一点开销,虽然就只有那么一点点。。
作者: netroby    时间: 2010-5-1 14:22
用MASQUERADE的好处就是配置好VPS后,如果万一你现在用的IP被墙之后,换上另一个IP,那么原来的防火墙配置还是可以用。
如果你用了SNAT指定了IP,下次又要重新做一次。
做防火墙之前,先要清空NAT规则。这样操作起来就多了几步。
作者: hidaigou    时间: 2010-5-1 14:24
大部分openvz vps的MASQUERADE都不开的,话说回来,quickweb的技术确实不错。
作者: ccp    时间: 2010-5-1 14:25
原帖由 netroby 于 2010-5-1 14:22 发表
用MASQUERADE的好处就是配置好VPS后,如果万一你现在用的IP被墙之后,换上另一个IP,那么原来的防火墙配置还是可以用。
如果你用了SNAT指定了IP,下次又要重新做一次。
做防火墙之前,先要清空NAT规则。这样操作起来就多了几 ...


我的VPS基本不用防火墙。黑进去也没有东西的说。。。IP被墙的问题,除非是你的VPS的IP被别的网站封锁,是GFW就没有关系。这是路由问题,就是SNAT的IP可以和用户连接VPN server的IP不同的。所以,这个没用。
作者: netroby    时间: 2010-5-1 14:25
服务也很赞。基本上有求必应。
作者: ccp    时间: 2010-5-1 14:34
原帖由 netroby 于 2010-5-1 14:25 发表
服务也很赞。基本上有求必应。

确实。我刚刚发了email过去问问。。4分钟相应。。
作者: netroby    时间: 2010-5-1 14:37
标题: 回复 33# 的帖子
CCP有点误解了。我是从另外一个方面来说的。GFW可以封锁80端口,比如封了你的IP(80端口)后,你放在vps上面的网站就打开不了。我的VPS不仅自己用着VPN, 也放着自己的博客,还有网站,所以如果被封了,只有换一个IP了。因为网站也必须要能访问到才行。
那原来的IP对于我来说,也没多大价值了。多一个IP,一个月最少要$1,所以只保留可用的IP,也是为了节约成本考虑。
作者: ccp    时间: 2010-5-1 14:42
原帖由 netroby 于 2010-5-1 14:37 发表
CCP有点误解了。我是从另外一个方面来说的。GFW可以封锁80端口,比如封了你的IP(80端口)后,你放在vps上面的网站就打开不了。我的VPS不仅自己用着VPN, 也放着自己的博客,还有网站,所以如果被封了,只有换一个IP了。因为网站 ...


我的意思是假如你的IP无论是不是墙了,用SNAT都比MASQUERADE,可以控制出口的IP。。我是这样挂了VPN+智能路由+改tracker进行下载public bt的,两个IP各有所用。。
作者: surftheair    时间: 2010-5-1 14:45
我使用了openvpn后发现dns服务器还是用的本地的设置,请问怎么改?
作者: ccp    时间: 2010-5-1 14:47
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 4.2.2.4"
作者: surftheair    时间: 2010-5-1 14:50
原帖由 ccp 于 2010-5-1 14:47 发表
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 4.2.2.4"

这个配置中写了的
作者: ccp    时间: 2010-5-1 14:51
那就只能手动改拉。
作者: netroby    时间: 2010-5-1 14:56
你是Windows还是linux?
作者: netroby    时间: 2010-5-1 14:57
windows下面在cmd里面敲ipconfig /all
会看到下面的配置信息:

Ethernet adapter 本地连接 3:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : TAP-Win32 Adapter V8
        Physical Address. . . . . . . . . : 00-FF-37-31-05-DA
        Dhcp Enabled. . . . . . . . . . . : Yes
        Autoconfiguration Enabled . . . . : Yes
        IP Address. . . . . . . . . . . . : 10.8.0.6
        Subnet Mask . . . . . . . . . . . : 255.255.255.252
        Default Gateway . . . . . . . . . : 10.8.0.5
        DHCP Server . . . . . . . . . . . : 10.8.0.5
        DNS Servers . . . . . . . . . . . : 8.8.8.8
                                            8.8.4.4
        Lease Obtained. . . . . . . . . . : 2010年5月1日 14:57:16
        Lease Expires . . . . . . . . . . : 2011年5月1日 14:57:16

PPP adapter 宽带连接:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
        Physical Address. . . . . . . . . : 00-53-45-00-00-00
        Dhcp Enabled. . . . . . . . . . . : No
        IP Address. . . . . . . . . . . . : 121.205.11.109
        Subnet Mask . . . . . . . . . . . : 255.255.255.255
        Default Gateway . . . . . . . . . : 121.205.11.109
        DNS Servers . . . . . . . . . . . : 218.85.152.99
                                            218.85.157.99
        NetBIOS over Tcpip. . . . . . . . : Disabled
作者: netroby    时间: 2010-5-1 14:58
按照我教程上配置来的话,就应该己经获取到VPN正确的DNS配置。
作者: eudx    时间: 2010-5-1 15:18
。。 CENTOS 不可以用呀?
作者: surftheair    时间: 2010-5-1 16:51
我把openvpn重装了一遍就好了,才发现openvpn的网站也被封了
作者: netroby    时间: 2010-5-1 18:17
触墙了呗?
作者: surftheair    时间: 2010-5-1 19:20
配合这个路由表,openvpn用起来真爽啊!国外的ip走vpn,国内的就直连。
http://code.google.com/p/chnroutes/
作者: surftheair    时间: 2010-5-2 18:15
请问如何才能让openvpn工作在tcp模式下?
作者: surftheair    时间: 2010-5-2 19:17
各位高手帮帮忙啊!TCP的iptables该怎么设置?




欢迎光临 全球主机交流论坛 (https://sunk.eu.org/) Powered by Discuz! X3.4