Total Pageviews

Thursday, 26 January 2012

OpenVZ的安装和设置

OpenVZ安装步骤

OpenVZ 是唯一可用于unibilling生产用的服务器虚拟技术。目前全球有多套unibilling运行于OpenVZ container。经过3年多的VOIP连续运营生产,证实绝对可靠稳定。
在新的服务器上用如下步骤安装openVZ:
导入 OpenVZ yum源
cd /etc/yum.repos.d
wget http://download.openvz.org/openvz.repo
rpm –import  http://download.openvz.org/RPM-GPG-Key-OpenVZ
下载openVZ内核及头文件安装包
mkdir -p /usr/src/files
cd /usr/src/files
wget http://download.openvz.org/kernel/branches/rhel5-2.6.18/028stab068.3/ovzkernel-2.6.18-164.11.1.el5.028stab068.3.i686.rpm
wget http://download.openvz.org/kernel/branches/rhel5-2.6.18/028stab068.3/ovzkernel-devel-2.6.18-164.11.1.el5.028stab068.3.i686.rpm
安装openVZ内核及头文件
rpm -ihv ovzkernel*.rpm
配置boot loader确保使用openVZ的内核启动
vi /etc/grub.conf
配置 sysctl
确保 /etc/sysctl.conf 文件中包含如下信息:
# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0

# Enables source route verification
net.ipv4.conf.all.rp_filter = 1

# Enables the magic-sysrq key
kernel.sysrq = 1

# We do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

编辑完毕保存,运行如下命令使之生效:

sysctl -p

禁用 SELinux

修改 /etc/sysconfig/selinux 文件,使其包含信息:
SELINUX=disabled

重新启动linux

shutdown -r now

机器重新启动后,运行 uname -r检查是否已经是openVZ的内核

安装openvz工具集

yum install vzquota
yum install vzctl-lib
yum install vzctl
yum install vzyum
yum install vzpkg
yum install vzrpm43-python
yum install vzrpm44-python
启动OpenVZ服务
/sbin/service vz start
安装操作系统模板文件
查找系统中可用的操作系统模板 yum search vztmpl [root@tpd620 /]# yum search vztmpl Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * addons: mirror.ii.uib.no * base: mirror.ii.uib.no * extras: mirror.ii.uib.no * openvz-kernel-rhel5: openvz.proserve.nl * openvz-utils: openvz.proserve.nl * updates: mirror.ii.uib.no ====================== Matched: vztmpl ======================= vztmpl-centos-4.i386 : OpenVZ template metadata for centos-4 i386. vztmpl-fedora-7.i386 : OpenVZ template metadata for fedora-7 i386. vztmpl-fedora-core-3.i386 : OpenVZ template metadata for fedora-core-3 i386. vztmpl-fedora-core-4.i386 : OpenVZ template metadata for fedora-core-4 i386. vztmpl-fedora-core-5.i386 : OpenVZ template metadata for fedora-core-5 i386. vztmpl-fedora-core-6.i386 : OpenVZ template metadata for fedora-core-6 i386. [root@tpd620 /]#
安装centos linux操作系统模板 yum install vztmpl-centos-4 为操作系统模板建立缓存 vzpkgcache
该命令将建立 centos-4-i386-minimal.tar.gz 和 centos-4-i386-default.tar.gz vzpkgcache centos-4-i386-minimal 将只建立 centos-4-i386-minimal.tar.gz vzpkgcache centos-4-i386-default 将只建立 centos-4-i386-default.tar.gz
查看系统中存在的操作系统缓存: [root@c8 ~]# vzpkgls centos-4-i386-default centos-4-i386-minimal 建立OpenVZ节点container
准备配置文件 为方便起见,平分Host机器的内存和CPU cd /etc/sysconfig/vz-scripts/ vzsplit -n 3 -f vps.mytest
上述命令将均分系统资源为3等份,产生一个例子配置文件 验证该文件的有效性:vzcfgvalidate ve-vps.mytest.conf-sample 创建节点VPS vzctl create 112 --ostemplate centos-4-i386-minimal --config vps.mytest 配置该VPS vzctl set 112 --hostname unibillingsrv1 --save vzctl set 112 --ipadd 207.182.xxx.xxx --save vzctl set 112 --userpasswd root:xxxxxxxxx vzctl set 112 --nameserver 209.190.xxx.xxx --save vzctl set 112 --onboot yes --save vzctl start 112 vzctl exec 112 service sshd start vzctl enter 112 vzctl stop 112 配置VPS硬盘容量等参数 grep DISK_QUOTA /etc/sysconfig/vz df /vz vi /etc/sysconfig/vz-scripts/112.conf
在该文件中添加 DISK_QUOTA=no grep DISK_QUOTA /etc/sysconfig/vz-scripts/112.conf vzctl stop 112
vzctl start 112 vzctl exec 112 df
vzctl set 112 --diskinodes 75000000:79000000 --save
vzctl set 112 --quotatime 600 --save
vzctl exec 112 df
vzctl exec 112 stat -f /
vzctl set 112 --quotaugidlimit 100 --save vzctl stop 112 vzctl start 112
vzctl exec 112 rpm -q quota
vzyum 112 install quota
vzquota stat 112 -t 向新建的vps中安装yum等工具 vzyum 112 install yum
vzyum 112 install diffutils 错误处理 若vzctl enter进入节点时出现错误,或ssh无法进入节点,需要运行如下命令: vzctl exec 112 "cd /dev; /sbin/MAKEDEV pty; /sbin/MAKEDEV tty; /sbin/MAKEDEV generic"
OpenVZ官方文档建议通过桥接方式来搞定IPv6,虽然也提供给VPS分配IPv6地址的方法,也提到需要通过修改sysctl.conf文件来处理邻居发现和路由发现等协议,但是文档并未提及如何修改sysctl.conf文件, 本文在不使用桥接的环境中,使vps可以与物理机共用同一段IPv6地址。 修改/etc/sysctl.conf文件,增加
1
2
3
4
5
# IPv6 Packet Forwarding and Proxy NDP
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.proxy_ndp = 1
net.ipv6.conf.all.proxy_ndp = 1
给VPS增加IPv6地址
1
vzctl set <id> --ipadd <ipv6_addr> --save
删除VPS的IPv6地址
1
vzctl set <id> --ipdel <ipv6_addr> --save
OpenVZ中要迁移vps主机,只需停止vps,将vps主机文件及配置文件备份至其他主机即可。
1
2
3
4
5
cd /vz/private
vzctl stop 102
tar cf - 102/ | ssh -l root 10.255.7.251 "(cd /vz/private; tar xf -)"
cd /etc/vz/conf
scp 102.conf root@10.255.7.251:/etc/vz/conf/
在10.255.7.251主机执行
1
vzctl start 102
即可重新启动vps。
要让VPS支持OpenVPN,让vps支tun/tap是第一步,如果在租用别人的vps,直接找客服要求增加tun/tap即可,要是自己搞的vps呢,那么该找谁要呢,参考OpenVZ官方文档就很容易搞定了:http://wiki.openvz.org/VPN_via_the_TUN/TAP_device 大概3步: 1、确定本机是否已经正确载入tun模块
1
lsmod | grep tun
2、如果没有任何返回,执行
1
modprobe tun
3、让vps对tun设备拥有读写权限
1
vzctl set 101 --devnodes net/tun:rw --save
记得下次重启让系统自动载入tun模块。对于RH系列的系统可以在/etc/sysconfig/modules目录下增加tun.modules文件,内容如下:
1
2
3
4
5
6
7
8
#!/bin/sh
echo -n "Loading TUN/TAP module..."
if /sbin/modprobe tun
then
echo "SUCCESS"
else
echo "FAILURE"
fi
给文件增加执行权限。
1
chmod +x /etc/sysconfig/modules/tun.modules

----------------------------------------------------

安装OpenVZ 获得OpenVZ yum安装源 # cd /etc/yum.repos.d # wget http://download.openvz.org/openvz.repo # rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ 安装OpenVZ核心以及头文件 # yum install ovzkernel[-flavor] 修改启动所使用的内核为OpenVZ内核,使OpenVZ内核为默认启动内核 vi /etc/grub.conf 将类似下面的内容 title Fedora Core (2.6.8-022stab029.1) root (hd0,0) kernel /vmlinuz-2.6.8-022stab029.1 ro root=/dev/sda5 quiet rhgb vga=0x31B initrd /initrd-2.6.8-022stab029.1.img 修改为类似这样 title OpenVZ (2.6.8-022stab029.1) root (hd0,0) kernel /vmlinuz-2.6.8-022stab029.1 ro root=/dev/sda5 initrd /initrd-2.6.8-022stab029.1.img 或直接在里面寻找类似开头为 title CentOS (2.6.18-194.3.1.el5.028stab069.6) 的项目,并且把default改为他的下标,下标从0开始 修改LINUX网络配置文件 /etc/sysctl.conf # On Hardware Node we generally need # packet forwarding enabled and proxy arp disabled net.ipv4.ip_forward = 1 #修改 net.ipv6.conf.default.forwarding = 1 #添加 net.ipv6.conf.all.forwarding = 1 #添加 net.ipv4.conf.default.proxy_arp = 0 #添加 # Enables source route verification net.ipv4.conf.all.rp_filter = 1 #修改 # Enables the magic-sysrq key kernel.sysrq = 1 #修改 # We do not want all our interfaces to send redirects net.ipv4.conf.default.send_redirects = 1 #添加 net.ipv4.conf.all.send_redirects = 0 #添加 关闭SELinux: SELINUX=disabled 重启LINUX #reboot 安装OpenVZ管理工具 # yum install vzctl # yum install vzquota # yum install vzyum 用到什么工具就安装什么工具,具体可以使用# yum search vz*搜索一下 启动OpenVZ服务 # /sbin/service vz start 使用OpenVZ & 建立VPS 安装操作系统模板 由于VZ是半虚拟化的,所以VZ和VM不同的是VZ需要系统模板,而不是VM那样只需要一个ISO文件就可以安装 搜索系统模板 # yum search vztmpl 在搜索出来的结果中选用你想安装的操作系统 # yum install vztmpl-centos-4 -y 为操作系统模板建立缓存 在我装的最小化CENTOS中,此步要下载很多包,需要很长时间完成 # vzpkgcache 该命令将建立centos-4-i386-minimal.tar.gz和centos-4-i386-default.tar.gz文件 或 # vzpkgcache centos-4-i386-minimal 建立 centos-4-i386-minimal.tar.gz # vzpkgcache centos-4-i386-default 建立 centos-4-i386-default.tar.gz 出现Cache file centos-4-i386-default.tar.gz [120M] created.表示创建成功 注意:本次步骤可能会出现如下错误 cp: cannot stat `/etc/sysconfig/vz-scripts//ve-vps.basic.conf-sample': No such file or directory ERROR: Can't copy VPS config 解决方法:进入/etc/sysconfig/vz-scripts/目录,将ve.basic.conf-sample 拷贝一份重命名为ve-vps.basic.conf-sample 查看系统中已经存在的操作系统缓存 # vzpkgls 创建OpenVZ操作系统节点(VPS) 准备配置文件 平分主机系统资源(当然,如果你对配置文件的修改很熟悉也可以自己定制) cd /etc/sysconfig/vz-scripts/ vzsplit -n 3 -f vps.zenw.org 这样,系统资源就被平均分成了3分,并且产生了一个配置文件示例 验证配置文件有效性 vzcfgvalidate ve-vps.zenw.org.conf-sample 创建VPS节点 vzctl create 100 --ostemplate centos-4-i386-minimal --config vps.zenw.org 其中100是该节点的编号,可以自己定义 配置该VPS 设置VPS的hostname vzctl set 100 --hostname zenw.org --save 设置VPS的ip vzctl set 100 --ipadd 192.168.xxx.xxx --save 设置VPS的管理员帐号和密码 vzctl set 100 --userpasswd root:xxxxxxxxx 设置VPS的DNS服务器 vzctl set 100 --nameserver 8.8.8.8 --save 设置VPS自启动 vzctl set 100 --onboot yes --save 启动VPS节点 vzctl start 100 执行VPS内部的命令(这里是开启VPS的ssh服务) vzctl exec 100 service sshd start 加入VPS节点 vzctl enter 100 停止VPS节点 vzctl stop 100 设置VPS参数 修改VPS节点的配置文件 vim /etc/sysconfig/vz-scripts/100.conf 在文件中添加或修改 DISK_QUOTA=no 重启VPS节点 vzctl restart 100 查看当前磁盘大小 vzctl exec 100 df 设置磁盘大小 vzctl set 100 --diskinodes 75000000:79000000 --save vzctl set 100 --quotatime 600 --save 查看修改后的磁盘大小 vzctl exec 100 df vzctl exec 100 stat -f / vzctl set 100 --quotaugidlimit 100 --save vzctl restart 100 vzctl exec 100 rpm -q quota vzyum 100 install quota vzquota stat 100 -t 为VPS节点安装yum工具或其他工具 vzyum 100 install <软件名称> vzyum 100 install yum 另外 如果vzctl enter进入节点时出现错误,或无法ssh节点,需要运行以下命令: vzctl exec 112 "cd /dev; /sbin/MAKEDEV pty; /sbin/MAKEDEV tty; /sbin/MAKEDEV generic" 更多阅读 http://www.amcoding.com/steps/openvz/openvz%E5%AE%89%E8%A3%85%E6%AD%A5%E9%AA%A4/

------------------------------------------------------

OpenVZ的VPS里不支持nat表?

在vps里执行:
1
iptables -t nat -L
提示:
1
2
iptables v1.2.11: can’t initialize iptables table `nat’: Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
只需在虚拟机上启用iptables的nat功能即可,详情参考:http://wiki.openvz.org/Using_NAT_for_container_with_private_IPs,对于内核版本高于2.6.8 stable的可以参考一下操作: 1、在/etc/modprobe.d/中增加conntrack.conf文件,文件名无所谓,后缀为.conf即可,内容如下:
1
options ip_conntrack ip_conntrack_disable_ve0=1
2、修改/etc/vz/vz.conf文件,将IPTABLES=行改成
1
IPTABLES="iptable_filter iptable_mangle ipt_limit ipt_multiport ipt_tos ipt_TOS ipt_REJECT ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_conntrack ipt_state ipt_helper iptable_nat ip_nat_ftp ip_nat_irc ipt_REDIRECT"
3、重启物理机后即可。
引自: http://www.wenzk.com/archives/1431
IPv6 works best when veth devices are used to bridge VEs to their host. An IPv6 compliant method of using veth interfaces for VEs can be found in the VEs and HNs in same subnets article.
venet devices are not fully IPv6 compliant, but still works if you statically assign IPv6 addresses. They do not properly support MAC addresses and consequently link local addresses and can not play nice with neighbor discovery or router advertisements, router discovery, or auto-conf. They also require additional modifications to the layer 3 forwarding behaviour of the host via sysctl.

Contents

 [hide]

[edit]venet example

(tests done on CentOS kernel 2.6.18-194.26.1.el5.028stab079.2)

[edit]Adding an IPv6 address to a container

# vzctl set <id> --ipadd <ipv6_addr> --save
In my tests, the container had to be restarted before it would respond to ICMP6 echo requests.

[edit]Removing an IPv6 address from a container

# vzctl set <id> --ipdel <ipv6_addr> --save
Removal is effective immediately and the host stops replying to echo requests.
我先用IPMASQ, /sbin/ipchains -A forward -j MASQ -i eth0:0 -s 10.100.100.236/32 eth0:0是我伪装的地址。 然后转发: /usr/sbin/ipmasqadm portfw -a -P tcp -L a.b.c.d 80 -R 10.100.100.236 80 a.b.c.d 是eht0:0的地址。 policy应该没问题。追踪到包已经从eth0:0进来,然后就什么都没有了! 10.100.100.236能ping通a.b.c.d 会不会和防止IP欺骗有关?

No comments:

Post a Comment