Total Pageviews

Tuesday, 20 August 2013

使用NAT为基于OpenVZ的独立服务器上的vps配置IP地址

对于购买的服务器,安装openvz,开了很多vps,ip地址明显不够用,如何给服务器配置ip地址?这里我们可以使用NAT来解决这个问题。
在配置OpenVZ时需要打开核心的路由转换支持,并且通常设置Hardware Node和VPS使用相同网段的地址,以便外面的机器可以直接访问到VPS上。但在某些情况下,例如托管服务器中,通常只提供一个互联网IP地址,再购买 一个IP地址是比较贵的。这时,我们可以把VPS设置为内网地址,然后通过iptables的NAT转换,让VPS与外界可以互相联通。
一、网络架构
当前IP配置是:
引用
HW:121.12.172.184/255.255.255.0
VPS:192.168.100.112/24
这样,VPS处在HW里面,使用私有网段地址,HW相当于网关的作用。
首先,需确认HW上已经打开路由转发,并关闭防火墙:
引用
# cat /proc/sys/net/ipv4/ip_forward
1
# service iptables stop
如果没有的话,请打开/etc/sysctl.conf的支持,并使用sysctl -p生效:
引用
net.ipv4.ip_forward = 1
※ 初次使用,请务必关闭防火墙设定,否则,可能会带来很多意想不到的事情。
然后,确认HW和VPS之间可以互通:
引用
# ping 192.168.100.112 -c 1
PING 192.168.100.112 (192.168.100.112) 56(84) bytes of data.
64 bytes from 192.168.100.112: icmp_seq=1 ttl=64 time=0.044 ms
— 192.168.100.112 ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.044/0.044/0.044/0.000 ms
# vzctl exec 112 ping 121.12.172.184 -c 1
PING 121.12.172.184 (121.12.172.184) 56(84) bytes of data.
64 bytes from 121.12.172.184: icmp_seq=1 ttl=64 time=0.046 ms
— 121.12.172.184 ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.046/0.046/0.046/0.000 ms
二、查看VPS状态
以我使用的模板centos-5-x86_64-default-5.2-20081210.tar.gz为例,VPS中的网络状态:
引用
# vzctl enter 112
entered into CT 112
# ifconfig venet0:0
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.100.112 P-t-P:192.168.100.112 Bcast:192.168.100.112 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
[root@112 /]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.0.2.0 * 255.255.255.0 U 0 0 0 venet0
169.254.0.0 * 255.255.0.0 U 0 0 0 venet0
default 192.0.2.1 0.0.0.0 UG 0 0 0 venet0
# cat /etc/sysconfig/network
NETWORKING=”yes”
GATEWAY=”192.0.2.1″
HOSTNAME=”112.linuxfly.org”
[root@112 /]# ping 192.0.2.1
connect: Invalid argument
可见,VPS通过venet0与HW互相访问。但网关192.0.2.1是一个虚拟出来的IP地址,VPS在启动时自动设定该值,不能直接修改。(若使用route add/del命令修改VPS的默认网关,VPS和HW将中断网络连接)
三、使用HW iptables的NAT转发
在HW上执行(121.12.172.184为HW上eth0的对外IP地址):
# iptables -F -t nat
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to 121.12.172.184
若HW使用浮动IP地址,请使用:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
然后设定VPS的DNS地址:
引用
# vzctl set 112 –nameserver 202.96.128.86 –save
File resolv.conf was modified
Saved parameters for CT 112
测试VPS能否出去:
引用
# vzctl exec 112 ping www.163.com -c 1
PING www.cache.idns.yeah.net (220.181.28.50) 56(84) bytes of data.
64 bytes from 220.181.28.50: icmp_seq=1 ttl=55 time=42.7 ms
— www.cache.idns.yeah.net ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 42.757/42.757/42.757/0.000 ms
这时,VPS处在HW的后面,若需要从互联网访问VPS,则还需要根据应用转发端口。例如22服务,在HW上设置:
# iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp –dport 8022 -j DNAT –to-destination 192.168.100.112:22
同样的道理,想利用VPS提供http服务的话,可以在HW上设置iptables或squid反向代理实现转发。
四、NAT inside VE
实际上这不属于本次内容的话题,但由于概念有点相似,觉得有必要说说。
NAT inside VE,也就是在VPS中使用iptables的NAT功能。VPS作为一个相对独立的虚拟系统环境,是支持iptables防火墙设置的。但VPS可使用的iptables模块受限与HW环境,并由/etc/vz/vz.conf决定:
引用
## IPv4 iptables kernel modules
IPTABLES=”ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length iptable_nat ip_nat_ftp”
其中,默认没有加入iptable_nat模块的。添加后,即可在VPS中使用了.
-------------------------------------------

openvz构建的vps中的venet和veth之间的不同


对于用openvz构建的vps网络,OpenVZ提供veth(Virtual eTHernet)设备或venet(Virtual NETwork)网络设备(或两者都有)。这里我们描述了这些设备之间的不同。
veth允许在CT中广播,所以你甚至可以在一个CT建立DHCP服务器,或一个使用域名广播的samba服务器,以及其他类似这样的应用。
veth也有一些安全上的意义。它通常直接桥接到主机的物理以太网设备上,所以你必须作出和一台真实的独立的主机上的以太网设备一样的考虑。CT用 户可以访问一个veth设备就如同它们是一个真正的以太网接口一样。然而,CT的root用户是唯一一个有权限访问该veth设备的用户。
关于venet设备,只有OpenVZ主机节点的管理员可以分配一个ip到CT。使用vetch设备,网络设置必须完全通过CT管理员在CT中完成。CT应该正确设置网关,IP/网络掩码等。然后节点管理只能选择你传输的方向。
veth设备可以自身也可以和其他设备一起被桥接起来。例如,在主机系统中管理员可以桥接两个CT中的veth到一个VLAN eth0.X中。这种情况下,这两个CT将被连接到这个VLAN。
venet设备是一个快速,高效的设置。
veth设备,IPv6从MAC自动生成一个地址。
简短的摘要
功能 veth venet
MAC地址 是 否
CT中的广播 是 否
传输嗅探 是 否
网络安全性 低[1] 高[2]
桥接 是 否
性能 快 更快
  1. 独立于主机。每个CT必须单独设置它自己的网络安全。
  2. 受控于主机。