<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ginkyo</id>
	<title>OpenVZ Virtuozzo Containers Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ginkyo"/>
	<link rel="alternate" type="text/html" href="https://wiki.openvz.org/Special:Contributions/Ginkyo"/>
	<updated>2026-06-13T22:31:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Introduction_to_virtualization&amp;diff=8468</id>
		<title>Introduction to virtualization</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Introduction_to_virtualization&amp;diff=8468"/>
		<updated>2010-04-12T15:45:39Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: 78.110.1.175 is an idiot  &amp;gt; spam : revert to kir version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Virtualization is a framework or methodology of dividing the resources of a computer into multiple execution environments. Virtualization techniques create multiple isolated partitions &amp;amp;mdash; Virtual Machines (VM) or [[Virtual Environment]]s ([[VE]]s) &amp;amp;mdash; on a single physical server. &lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
There are several kinds of virtualization techniques which provide similar features but differ in the degree of abstraction and the methods used for virtualization.&lt;br /&gt;
&lt;br /&gt;
=== Virtual machines (VMs) ===&lt;br /&gt;
'''Virtual machines''' emulate some real or fictional hardware, which in turn requires real resources from the ''host'' (the machine running the VMs). This approach, used by most ''system emulators'', allows the emulator to run an arbitrary ''guest operating system'' without modifications because guest OS is not aware that it is not running on real hardware. The main issue with this approach is that some CPU instructions require additional privileges and may not be executed in user space thus requiring a ''virtual machines monitor'' (VMM) to analyze executed code and make it safe on-the-fly. Hardware emulation approach is used by [http://www.vmware.com/ VMware] products, [http://fabrice.bellard.free.fr/qemu/ QEMU], [http://parallels.com/ Parallels] and [http://www.microsoft.com/windowsserversystem/virtualserver/default.mspx Microsoft Virtual Server].&lt;br /&gt;
&lt;br /&gt;
=== Paravirtualization ===&lt;br /&gt;
This technique also requires a VMM, but most of its work is performed in the ''guest OS'' code, which in turn is ''modified'' to support this VMM and avoid unnecessary use of privileged instructions. The paravirtualization technique also enables running different OSs on a single server, but requires them to be ported, i.e. they should «know» they are running under the hypervisor. The paravirtualization approach is used by products such as [http://www.xensource.com/xen/ Xen] and [http://user-mode-linux.sourceforge.net/ UML].&lt;br /&gt;
&lt;br /&gt;
=== Virtualization on the OS level, a.k.a. containers virtualization ===&lt;br /&gt;
Most applications running on a server can easily share a machine with others, if they could be isolated and secured. Further, in most situations, different operating systems are not required on the same server, merely multiple instances of a single ''operating system''. OS-level virtualization systems have been designed to provide the required isolation and security to run multiple applications or copies of the same OS (but different distributions of the OS) on the same server. [http://openvz.org/ OpenVZ], [http://www.swsoft.com/products/virtuozzo Virtuozzo], [http://linux-vserver.org/ Linux-VServer], [http://www.sun.com/bigadmin/content/zones/ Solaris Zones] and [http://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/jail.html FreeBSD Jails] are examples of OS-level virtualization.&lt;br /&gt;
&lt;br /&gt;
== Short comparison ==&lt;br /&gt;
The three techniques differ in complexity of implementation, breadth of OS support, performance in comparison with standalone server, and level of access to common resources. For example, VMs have wider scope of usage, but poorer performance. Para-VMs have better performance, but can support fewer OSs because one has to modify the original OS.&lt;br /&gt;
&lt;br /&gt;
Virtualization on the OS level provides the best performance and scalability compared to other approaches. Performance difference of such systems can be as low as 1…3%, comparing with that of a standalone server. [[Virtual Environment]]s are usually also much simpler to administer as all of them can be accessed and administered from the host system. Generally, such systems are the best choice for server consolidation of same OS workloads.&lt;br /&gt;
&lt;br /&gt;
== Where to go further ==&lt;br /&gt;
If you've decided to try OpenVZ virtualization solution go to [[Quick installation|OpenVZ installation]] section.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Operating_system-level_virtualization wikipedia: Operating system-level virtualization]&lt;br /&gt;
* [http://www.hpl.hp.com/techreports/2007/HPL-2007-59R1.pdf HP Labs: Performance Evaluation of Virtualization Technologies for Server Consolidation]&lt;br /&gt;
&lt;br /&gt;
[[Category: Technology]]&lt;br /&gt;
[[Category: Concepts]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Virtual_network_device&amp;diff=8115</id>
		<title>Virtual network device</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Virtual_network_device&amp;diff=8115"/>
		<updated>2010-01-25T13:05:50Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: IPv6 support&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Virtual network device (&amp;lt;code&amp;gt;venet&amp;lt;/code&amp;gt;) is the default network device for a [[container]]. Due to [[w:Network_Layer|Layer 3]] employed by OpenVZ's venet, this network device looks like a point-to-point connection between [[container]] and the [[CT0|host system]]. It does packet switching based on IP header. This is a default network device for container (an alternative is [[veth]] device).&lt;br /&gt;
&lt;br /&gt;
Venet drop ip-packets '''from''' the container with a source address, and '''in''' the container with the destination address, which is not corresponding to an ip-address of the container.&lt;br /&gt;
&lt;br /&gt;
Venet device is created automatically on [[container]] start. Vzctl scripts set up an appropriate IP address and other settings on venet inside a container.&lt;br /&gt;
&lt;br /&gt;
==  Usage ==&lt;br /&gt;
&lt;br /&gt;
== Kernel module ==&lt;br /&gt;
First of all, check that &amp;lt;code&amp;gt;vznetdev&amp;lt;/code&amp;gt; module is loaded:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# lsmod | grep vznetdev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it is not, load the module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# modprobe vznetdev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You might want to check /etc/init.d/vz script to make sure the module gets loaded during startup.&lt;br /&gt;
&lt;br /&gt;
=== Adding IP address to a container ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set &amp;lt;CTID&amp;gt; --ipadd &amp;lt;IP1&amp;gt;[,&amp;lt;IP2&amp;gt;,...] [--save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|This option is incremental, so IP addresses are added to already existing ones.}}&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set 101 --ipadd 10.0.0.1 --save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After executing this command IP address 10.0.0.1 will be added to container 101 and IP configuration will be saved to a container configuration file.&lt;br /&gt;
&lt;br /&gt;
=== Removing IP address from a container ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set &amp;lt;CTID&amp;gt; --ipdel &amp;lt;IP1&amp;gt;[,&amp;lt;IP2&amp;gt;,...] [--save]&lt;br /&gt;
vzctl set &amp;lt;CTID&amp;gt; --ipdel all [--save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set 101 --ipdel 10.0.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After executing this command IP address 10.0.0.1 will be removed from container 101, but IP configuration will not be changed in container config file. And after container reboot IP address 10.0.0.1 will be assigned to this container again.&lt;br /&gt;
&lt;br /&gt;
== Specific aspects of venet network device ==&lt;br /&gt;
&lt;br /&gt;
{{Note|If you require a feature which venet is lacking (from the list below), please consider using [[veth]] device (which have [[w:Data_Link_Layer|layer 2]] support.)}}&lt;br /&gt;
&lt;br /&gt;
=== No [[w:Address_Resolution_Protocol|ARP]] protocol support ===&lt;br /&gt;
Venet network device is explicitly NOARP, so there is no MAC address.&lt;br /&gt;
Consequently, it's not possible to make broadcasts inside a [[container]], so software like Samba server or DHCP server will not function (under a container with a venet network device).&lt;br /&gt;
&lt;br /&gt;
=== No [[w:Network_bridge|bridge]] support ===&lt;br /&gt;
Venet network device cannot be bridged together and/or with other devices.&lt;br /&gt;
&lt;br /&gt;
=== No possiblity to assign an IP from the CT ===&lt;br /&gt;
With venet device, only OpenVZ [[hardware node]] administrator can assign an IP address to a [[container]].&lt;br /&gt;
&lt;br /&gt;
=== No full support of IPv6 stack ===&lt;br /&gt;
&lt;br /&gt;
venet devices are not fully IPv6 compliant. 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, to get your venet devices working.&lt;br /&gt;
Please have a look at the [[Quick installation#sysctl]] section.&lt;br /&gt;
&lt;br /&gt;
veth devices do require iptables and ip6tables exceptions on the host for each VE address. &lt;br /&gt;
&lt;br /&gt;
You'll need to use the veth bridging device if you want full IPv6 compliance.  See the [[VEs and HNs in same subnets]] article for an example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Veth]]&lt;br /&gt;
* [[Differences between venet and veth]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Networking]]&lt;br /&gt;
[[Category: HOWTO]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_bandwidth_of_containers&amp;diff=8095</id>
		<title>Monitoring bandwidth of containers</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_bandwidth_of_containers&amp;diff=8095"/>
		<updated>2010-01-25T00:05:03Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: append Category Networking &amp;amp; $VE_PRIVATE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Monitoring bandwith of containers}}&lt;br /&gt;
&lt;br /&gt;
Use the /proc/dev/net inside a container, dump stats into a round robin database (rrd)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Bandwidth collection script for OpenVZ by Eric 'phpfreak' Rosebrock&lt;br /&gt;
# http://www.serverpowered.com / http://www.thewebfreaks.com&lt;br /&gt;
# Please read: http://www.serverpowered.com/openvz-bandwidth-accounting.php&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# No warranties on this script, use it at your own risk!&lt;br /&gt;
#&lt;br /&gt;
# Special thanks to Rick Blundell for helping me to get this thing going.&lt;br /&gt;
#&lt;br /&gt;
# Discussions: http://forum.openvz.org/index.php?t=tree&amp;amp;goto=1350&lt;br /&gt;
&lt;br /&gt;
# BWVE is the bandwidth storage VE. This would have been created by the&lt;br /&gt;
# tutorial you followed as listed above.&lt;br /&gt;
&lt;br /&gt;
BWVE=1002&lt;br /&gt;
&lt;br /&gt;
# BWDIR is the directory inside the bandwdith VE where the .rrd files&lt;br /&gt;
# will be stored.&lt;br /&gt;
&lt;br /&gt;
BWDIR=var/rrd/vz&lt;br /&gt;
&lt;br /&gt;
## Default folder for containers&lt;br /&gt;
VE_PRIVATE=/var/lib/vz/private&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# You should not need to edit anything below this line.&lt;br /&gt;
&lt;br /&gt;
# Get the date from the first of this month to create new rrd files&lt;br /&gt;
TDATE=`date +%Y-%m-01`;&lt;br /&gt;
ETIME=`date +%s -d $TDATE`&lt;br /&gt;
&lt;br /&gt;
# Define the full path to the bandwidth VE directory and the storage dir.&lt;br /&gt;
CBWDIR=$VE_PRIVATE/$BWVE/$BWDIR&lt;br /&gt;
&lt;br /&gt;
# Test and make sure that directory is there, if not create it.&lt;br /&gt;
if ! test -d $CBWDIR; then&lt;br /&gt;
        echo $CBWDIR does not exist, creating it.&lt;br /&gt;
        mkdir $CBWDIR&lt;br /&gt;
&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Get a list of all of the VE's created on the system, not just the running ones.&lt;br /&gt;
&lt;br /&gt;
for i in `ls $CBWDIR`; do&lt;br /&gt;
        VES=`echo $i | cut -f2 -d- | cut -f1 -d.`;&lt;br /&gt;
&lt;br /&gt;
        # if the VE was there before, an .rrd file will exist. Now if the VE is gone,&lt;br /&gt;
        # Delete the .rrd file because its obviously not needed anymore.&lt;br /&gt;
&lt;br /&gt;
        if ! test -d $VE_PRIVATE/$VES; then&lt;br /&gt;
                echo $i will be deleted&lt;br /&gt;
                rm -rf $CBWDIR/vps-$VES.rrd&lt;br /&gt;
        fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# Time to do the data collection.&lt;br /&gt;
for i in `/usr/sbin/vzlist -Ho veid`; do&lt;br /&gt;
&lt;br /&gt;
                RRDFILE=$CBWDIR/vps-$i.rrd&lt;br /&gt;
&lt;br /&gt;
                if ! test -e $RRDFILE; then&lt;br /&gt;
                        echo $RRDFILE does not exist, creating.&lt;br /&gt;
                        /usr/bin/rrdtool create $RRDFILE -s 300 \&lt;br /&gt;
                                DS:ds0:DERIVE:600:0:1125000000 \&lt;br /&gt;
                                DS:ds1:DERIVE:600:0:1125000000 \&lt;br /&gt;
                                RRA:AVERAGE:0.5:1:600 \&lt;br /&gt;
                                RRA:AVERAGE:0.5:6:700 \&lt;br /&gt;
                                RRA:AVERAGE:0.5:24:775 \&lt;br /&gt;
                                RRA:AVERAGE:0.5:288:797 \&lt;br /&gt;
                                RRA:MAX:0.5:1:600 \&lt;br /&gt;
                                RRA:MAX:0.5:6:700 \&lt;br /&gt;
                                RRA:MAX:0.5:24:775 \&lt;br /&gt;
                                RRA:MAX:0.5:288:797 \&lt;br /&gt;
                                RRA:MIN:0.5:1:600 \&lt;br /&gt;
                                RRA:MIN:0.5:6:700 \&lt;br /&gt;
                                RRA:MIN:0.5:24:775 \&lt;br /&gt;
                                RRA:MIN:0.5:288:797&lt;br /&gt;
                fi&lt;br /&gt;
&lt;br /&gt;
                X=`/usr/sbin/vzctl exec $i &amp;quot;grep venet0 /proc/net/dev&amp;quot;`&lt;br /&gt;
                eval `echo $X | cut -f2 -d: | awk '{printf&amp;quot;IN=%s\nOUT=%s\n&amp;quot;, $1, $9}'`&lt;br /&gt;
&lt;br /&gt;
                for g in IN OUT;do&lt;br /&gt;
                        if [ -z ${!g} ]; then&lt;br /&gt;
                                echo foo&lt;br /&gt;
                                eval $g=0&lt;br /&gt;
                        fi&lt;br /&gt;
                done&lt;br /&gt;
                /usr/bin/rrdtool update $RRDFILE N:$IN:$OUT&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: HOWTO]]&lt;br /&gt;
[[Category: Monitoring]]&lt;br /&gt;
[[Category: Networking]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Containers/Networking&amp;diff=8094</id>
		<title>Containers/Networking</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Containers/Networking&amp;diff=8094"/>
		<updated>2010-01-24T16:21:40Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: append Category Networking&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Containers]]&lt;br /&gt;
[[Category: Networking]]&lt;br /&gt;
&lt;br /&gt;
There are several approaches of how to virtualize networking for containers. Those are desribed below.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Layer 3 virtualized network interface ==&lt;br /&gt;
&lt;br /&gt;
This one is employed by OpenVZ's venet. See [[venet]].&lt;br /&gt;
&lt;br /&gt;
== Layer 2 virtualized network interface ==&lt;br /&gt;
&lt;br /&gt;
This one is employed by OpenVZ's veth. See [[veth]].&lt;br /&gt;
&lt;br /&gt;
== Layer 3 isolated network (bind filtering) ==&lt;br /&gt;
&lt;br /&gt;
This one is implemented in Linux-VServer. Basically, when a container calls &amp;lt;code&amp;gt;bind()&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;INADDR_ANY&amp;lt;/code&amp;gt;, kernel actually binds the socket to some specific IP address(es). Some more details (not much) can be found at http://linux-vserver.org/Paper#Network_Separation&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Differences between venet and veth]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Using_veth_and_brctl_for_protecting_HN_and_saving_IP_addresses&amp;diff=8093</id>
		<title>Using veth and brctl for protecting HN and saving IP addresses</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Using_veth_and_brctl_for_protecting_HN_and_saving_IP_addresses&amp;diff=8093"/>
		<updated>2010-01-24T16:13:55Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: append Category HOWTO &amp;amp; Networking&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Configuration described below has been suggested by Ugo123. Thank you.&lt;br /&gt;
&lt;br /&gt;
Consider we are facing the following task:&lt;br /&gt;
&lt;br /&gt;
# We have limited range of IP addresses granted by ISP. We want to assign as many granted IPs to containers as possible. We do not want to protect containers from Internet.&lt;br /&gt;
# We want to protect the [[HN]] OS ([[CT]]0) from Internet and make it possible to manage containers from [[CT0]] within local area network.&lt;br /&gt;
&lt;br /&gt;
Assume we have a [[HN]] with 2 Ethernet cards (interfaces eth0 and eth1), OpenVZ kernel 2.6.18-028stab033, vzctl version 3.0.16,&lt;br /&gt;
bridge-utils version 1.1. OpenVZ installation process is covered in [[quick installation]].&lt;br /&gt;
&lt;br /&gt;
This task can be effectively performed by setting up the configuration presented in Figure 1.&lt;br /&gt;
&lt;br /&gt;
Figure 1: Effective configuration. 10.0.98.96-10.0.98.X - range of IP addresses granted by ISP, 192.168.1.136 - IP address from LAN&lt;br /&gt;
&lt;br /&gt;
[[Image:fig.jpg]]&lt;br /&gt;
&lt;br /&gt;
Initial ifconfig output of HN is the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[HN]# ifconfig&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:34&lt;br /&gt;
          inet addr:192.168.1.136  Bcast:192.168.3.255  Mask:255.255.252.0&lt;br /&gt;
          inet6 addr: fe80::230:48ff:fe5b:ab34/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:3122 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:246 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000&lt;br /&gt;
          RX bytes:325879 (318.2 KiB)  TX bytes:57278 (55.9 KiB)&lt;br /&gt;
          Interrupt:20&lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:35&lt;br /&gt;
          inet addr:192.168.0.32  Bcast:192.168.3.255  Mask:255.255.252.0&lt;br /&gt;
          inet6 addr: fe80::213:d4ff:fe90:4d50/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:603734 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:36627 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000&lt;br /&gt;
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)&lt;br /&gt;
          Interrupt:21&lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback&lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:1376 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:1376 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0&lt;br /&gt;
          RX bytes:2078718 (1.9 MiB)  TX bytes:2078718 (1.9 MiB)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let us step through the setup process.&lt;br /&gt;
&lt;br /&gt;
1) Create 2 containers on the HN as described in http://download.openvz.org/doc/OpenVZ-Users-Guide.pdf.&lt;br /&gt;
For testing purposes I've used opensuse-10 precreated template from openvz.org:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[HN]# cd /vz/template/cache&lt;br /&gt;
[HN]# wget http://download.openvz.org/template/precreated/opensuse-10-i386-default.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create container 101 and assign it one of the IP addresses obtained from ISP:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[HN]# vzctl create 101 --ostemplate opensuse-10-i386-default --ipadd 10.0.98.96&lt;br /&gt;
[HN]# vzctl set 101 --userpasswd root:XXX --save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And do the same for CT 102 ... CT N. When ready - start containers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[HN]# vzctl start 101&lt;br /&gt;
[HN]# vzlist -a&lt;br /&gt;
      CTID      NPROC STATUS  IP_ADDR         HOSTNAME&lt;br /&gt;
       101          4 running 10.0.98.96      -&lt;br /&gt;
       102          4 running 10.0.98.97      -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2) By default containers use venet device for networking (see [[venet]]). But current&lt;br /&gt;
configuration requires using alternative networking - through veth devices (see [[Virtual Ethernet device]]).&lt;br /&gt;
Switch CT 101 to veth by doing the following:&lt;br /&gt;
&lt;br /&gt;
MAC address needed by eth0 of CT 101 and veth101.0 should be generated by easymac:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[HN]# wget http://www.easyvmx.com/software/easymac.sh&lt;br /&gt;
[HN]# chmod 0777 easymac.sh&lt;br /&gt;
[HN]# ./easymac.sh -R&lt;br /&gt;
00:0C:29:70:BB:34&lt;br /&gt;
[HN]# ./easymac.sh -R&lt;br /&gt;
00:0C:29:C0:2E:07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace venet by veth device on HN:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[HN]# ifconfig venet0:0 down&lt;br /&gt;
[HN]# vzctl set 101 --netif_add eth0,00:0C:29:70:BB:34,veth101.0,00:0C:29:C0:2E:07 --save&lt;br /&gt;
[HN]# ifconfig veth101.0 0&lt;br /&gt;
[HN]# echo 0 &amp;gt; /proc/sys/net/ipv4/conf/veth101.0/forwarding&lt;br /&gt;
[HN]# echo 0 &amp;gt; /proc/sys/net/ipv4/conf/veth101.0/proxy_arp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enter the container and tune ifconfig within the container:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[CT 101]# vzctl enter 101&lt;br /&gt;
[CT 101]# ifconfig venet0:0 down&lt;br /&gt;
[CT 101]# ifconfig venet0 down&lt;br /&gt;
[CT 101]# ifconfig eth0 0&lt;br /&gt;
[CT 101]# ip addr add 10.0.98.96 dev eth0&lt;br /&gt;
[CT 101]# ip route add default dev eth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The same (whole item 2) should be done for CT 102 ... CT N.&lt;br /&gt;
3) Now we should eliminate the IP address on eth1:&lt;br /&gt;
&lt;br /&gt;
 [HN]# vim /etc/sysconfig/network-scripts/ifcfg-eth1&lt;br /&gt;
&lt;br /&gt;
Edit like this:&lt;br /&gt;
 DEVICE=eth1&lt;br /&gt;
 #BOOTPROTO=dhcp                  &amp;lt;&amp;lt;== comment out&lt;br /&gt;
 HWADDR=XX:XX:XX:XX:XX:XX&lt;br /&gt;
 ONBOOT=yes&lt;br /&gt;
&lt;br /&gt;
and save changes (:wq).&lt;br /&gt;
&lt;br /&gt;
 [HN]# /etc/init.d/network restart&lt;br /&gt;
&lt;br /&gt;
And turn off forwarding and proxy_arp for eth1.&lt;br /&gt;
&lt;br /&gt;
 [HN]# ifconfig eth1 0&lt;br /&gt;
 [HN]# echo 0 &amp;gt; /proc/sys/net/ipv4/conf/eth1/forwarding&lt;br /&gt;
 [HN]# echo 0 &amp;gt; /proc/sys/net/ipv4/conf/eth1/proxy_arp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4) Create br0 bridge uniting eth1, veth101.0, ..., vethN.0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[HN]# brctl addbr br0&lt;br /&gt;
[HN]# brctl addif br0 eth1&lt;br /&gt;
[HN]# brctl addif br0 veth101.0&lt;br /&gt;
..., veth102.0, vethN.0 etc.&lt;br /&gt;
[HN]# ifconfig br0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And turn off frowarding and proxy_arp for br0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[HN]# echo 0 &amp;gt; /proc/sys/net/ipv4/conf/br0/forwarding&lt;br /&gt;
[HN]# echo 0 &amp;gt; /proc/sys/net/ipv4/conf/br0/proxy_arp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is very important action. If skipped, network&lt;br /&gt;
can be broken on further steps due to incoming arp-requests provoked storm.&lt;br /&gt;
&lt;br /&gt;
As a result of above listed actions the ifconfig output like the following should be listed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[HN]# ifconfig&lt;br /&gt;
br0       Link encap:Ethernet  HWaddr 00:0C:29:A7:A9:D9&lt;br /&gt;
          inet6 addr: fe80::20c:29ff:fea7:a9d9/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:79 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:17 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0&lt;br /&gt;
          RX bytes:2972 (2.9 KiB)  TX bytes:4390 (4.2 KiB)&lt;br /&gt;
&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:30:48:5B:AB:34&lt;br /&gt;
          inet addr:192.168.1.136  Bcast:192.168.3.255  Mask:255.255.252.0&lt;br /&gt;
          inet6 addr: fe80::230:48ff:fe5b:ab34/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:347855 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:4778 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000&lt;br /&gt;
          RX bytes:35964081 (34.2 MiB)  TX bytes:698801 (682.4 KiB)&lt;br /&gt;
          Interrupt:20&lt;br /&gt;
&lt;br /&gt;
eth1      Link encap:Ethernet  HWaddr 00:30:48:5B:AB:35&lt;br /&gt;
          inet6 addr: fe80::230:48ff:fe5b:ab35/64 Scope:Link&lt;br /&gt;
          UP BROADCAST MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:322 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:182 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000&lt;br /&gt;
          RX bytes:41943 (40.9 KiB)  TX bytes:21338 (20.8 KiB)&lt;br /&gt;
          Interrupt:21&lt;br /&gt;
&lt;br /&gt;
lo        Link encap:Local Loopback&lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:1376 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:1376 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0&lt;br /&gt;
          RX bytes:2078718 (1.9 MiB)  TX bytes:2078718 (1.9 MiB)&lt;br /&gt;
&lt;br /&gt;
veth101.0 Link encap:Ethernet  HWaddr 00:0C:29:C0:2E:07&lt;br /&gt;
          inet6 addr: fe80::20c:29ff:fec0:2e07/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:363 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:397 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0&lt;br /&gt;
          RX bytes:31134 (30.4 KiB)  TX bytes:31440 (30.7 KiB)&lt;br /&gt;
&lt;br /&gt;
veth102.0 Link encap:Ethernet  HWaddr 00:0C:29:A7:A9:D9&lt;br /&gt;
          inet6 addr: fe80::20c:29ff:fea7:a9d9/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:36 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:60 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0&lt;br /&gt;
          RX bytes:1840 (1.7 KiB)  TX bytes:2350 (2.2 KiB)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5) That is all. It's time to test the obtained configuration.&lt;br /&gt;
Now plug eth1 of HN into network wall outlet provided by ISP and carry out the following testing:&lt;br /&gt;
&lt;br /&gt;
- It should be tested that containers are accessible from Internet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INET]# ssh root@10.0.98.96&lt;br /&gt;
[CT 101]#  ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
- HN is not accessible from Internet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INET]# ssh root@192.168.1.136&lt;br /&gt;
inaccessible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
- containers can be managed from HN:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[HN]# vzctl enter 101&lt;br /&gt;
[CT 101]# ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
- containers CT 101, CT 102 .. CT N &amp;quot;see&amp;quot; each other (ping).&lt;br /&gt;
&lt;br /&gt;
If all the steps are done as written, it should work.&lt;br /&gt;
Enjoy.&lt;br /&gt;
&lt;br /&gt;
[[Category: HOWTO]]&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Virtual_Ethernet_device&amp;diff=8039</id>
		<title>Virtual Ethernet device</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Virtual_Ethernet_device&amp;diff=8039"/>
		<updated>2010-01-01T20:59:03Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: Undo revision 8038 by Ginkyo (Talk) sorry it's &amp;gt; and not &amp;gt;=&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Virtual Ethernet device''' is an Ethernet-like device which can be used&lt;br /&gt;
inside a [[container]]. Unlike [[venet]] network device, [[veth]] device&lt;br /&gt;
has a MAC address, therefore it can be used in configurations, when veth&lt;br /&gt;
is bridged to ethX or other device and container's user fully sets up&lt;br /&gt;
his networking himself, including IPs, gateways etc.&lt;br /&gt;
&lt;br /&gt;
Virtual Ethernet device consist of two Ethernet devices --&lt;br /&gt;
the one in [[CT0]] and another one in CT. These devices are connected&lt;br /&gt;
to each other, so if a packet goes to one&lt;br /&gt;
device it will come out from the other device.&lt;br /&gt;
&lt;br /&gt;
== Virtual Ethernet device usage ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel module ===&lt;br /&gt;
First of all, make sure the &amp;lt;code&amp;gt;vzethdev&amp;lt;/code&amp;gt; module is loaded:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# lsmod | grep vzeth&lt;br /&gt;
vzethdev                8224  0&lt;br /&gt;
vzmon                  35164  5 vzethdev,vznetdev,vzrst,vzcpt&lt;br /&gt;
vzdev                   3080  4 vzethdev,vznetdev,vzmon,vzdquota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case it is not loaded, load it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# modprobe vzethdev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|in vzctl &amp;lt; 3.0.11, vzethdev is not autoloaded by &amp;lt;code&amp;gt;/etc/init.d/vz&amp;lt;/code&amp;gt; script, so you have to edit it to load this module.}}&lt;br /&gt;
&lt;br /&gt;
=== MAC addresses ===&lt;br /&gt;
In the below commands, you should use random MAC addresses. Do not use MAC addresses of real eth devices, because this can lead to collisions.&lt;br /&gt;
&lt;br /&gt;
MAC addresses must be entered in XX:XX:XX:XX:XX:XX format.&lt;br /&gt;
&lt;br /&gt;
YOU MAY NOT NEED TO GENERATE MAC ADDRESSES BY HAND BECAUSE vzctl --veth_add&lt;br /&gt;
MAY GENERATE THEM AUTOMATICALLY AS NECESSARY.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, there is a utility script available for generating MAC addresses: http://www.easyvmx.com/software/easymac.sh. It is to be used like this:&lt;br /&gt;
&lt;br /&gt;
 chmod +x easymac.sh&lt;br /&gt;
 ./easymac.sh -R&lt;br /&gt;
&lt;br /&gt;
=== Adding veth to a CT ===&lt;br /&gt;
&lt;br /&gt;
==== syntax vzctl version &amp;gt; 3.0.22 ====&lt;br /&gt;
&lt;br /&gt;
 vzctl set &amp;lt;CTID&amp;gt; --netif_add &amp;lt;ifname&amp;gt;[,&amp;lt;mac&amp;gt;,&amp;lt;host_ifname&amp;gt;,&amp;lt;host_mac&amp;gt;,&amp;lt;bridge&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Here&lt;br /&gt;
* &amp;lt;tt&amp;gt;ifname&amp;lt;/tt&amp;gt; is the Ethernet device name in the CT&lt;br /&gt;
* &amp;lt;tt&amp;gt;mac&amp;lt;/tt&amp;gt; is its MAC address in the CT&lt;br /&gt;
* &amp;lt;tt&amp;gt;host_ifname&amp;lt;/tt&amp;gt;  is the Ethernet device name on the host ([[CT0]])&lt;br /&gt;
* &amp;lt;tt&amp;gt;host_mac&amp;lt;/tt&amp;gt; is its MAC address on the host ([[CT0]])&lt;br /&gt;
* &amp;lt;tt&amp;gt;bridge&amp;lt;/tt&amp;gt; is an optional parameter which can be used in custom network start scripts to automatically add  the interface to a bridge.&lt;br /&gt;
&lt;br /&gt;
{{Note|All parameters except &amp;lt;code&amp;gt;ifname&amp;lt;/code&amp;gt; are optional and are automatically generated if not specified.}}&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --netif_add eth0 --save&lt;br /&gt;
&lt;br /&gt;
Or, if you want to specify everything:&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --netif_add eth0,00:12:34:56:78:9A,veth101.0,00:12:34:56:78:9B --save&lt;br /&gt;
&lt;br /&gt;
Or, if you want to specify the bridge and leave the other values autogenerated:&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --netif_add eth0,,,,vmbr1 --save&lt;br /&gt;
&lt;br /&gt;
==== syntax vzctl version &amp;gt;= 3.0.14 ====&lt;br /&gt;
&lt;br /&gt;
Syntax is the same as above, but without a &amp;lt;bridge&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
==== syntax vzctl version &amp;lt; 3.0.14 ====&lt;br /&gt;
&lt;br /&gt;
 vzctl set &amp;lt;CTID&amp;gt; --veth_add &amp;lt;dev_name&amp;gt;,&amp;lt;dev_addr&amp;gt;,&amp;lt;ve_dev_name&amp;gt;,&amp;lt;ve_dev_addr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here &lt;br /&gt;
* &amp;lt;tt&amp;gt;dev_name&amp;lt;/tt&amp;gt; is the Ethernet device name that you are creating on the [[CT0|host system]]&lt;br /&gt;
* &amp;lt;tt&amp;gt;dev_addr&amp;lt;/tt&amp;gt; is its MAC address&lt;br /&gt;
* &amp;lt;tt&amp;gt;ve_dev_name&amp;lt;/tt&amp;gt; is the corresponding Ethernet device name you are creating on the CT&lt;br /&gt;
* &amp;lt;tt&amp;gt;ve_dev_addr&amp;lt;/tt&amp;gt; is its MAC address&lt;br /&gt;
&lt;br /&gt;
{{Note|this option is incremental, so devices are added to already existing ones.}}&lt;br /&gt;
&lt;br /&gt;
NB there should no spaces after the commas.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node] ifconfig eth0&lt;br /&gt;
...&lt;br /&gt;
HWaddress 00:12:34:56:78:9B&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [host-node] easymac.sh -R&lt;br /&gt;
 00:12:34:56:78:9A&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --veth_add veth101.0,00:12:34:56:78:9A,eth0,00:12:34:56:78:9B --save&lt;br /&gt;
&lt;br /&gt;
After executing this command &amp;lt;tt&amp;gt;veth&amp;lt;/tt&amp;gt; device will be created for CT 101 and veth configuration will be saved to a CT configuration file.&lt;br /&gt;
Host-side Ethernet device will have &amp;lt;tt&amp;gt;veth101.0&amp;lt;/tt&amp;gt; name and &amp;lt;tt&amp;gt;00:12:34:56:78:9A&amp;lt;/tt&amp;gt; MAC address.&lt;br /&gt;
CT-side Ethernet device will have &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt; name and &amp;lt;tt&amp;gt;00:12:34:56:78:9B&amp;lt;/tt&amp;gt; MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Removing veth from a CT ===&lt;br /&gt;
&lt;br /&gt;
==== syntax vzctl version &amp;gt;= 3.0.14 ====&lt;br /&gt;
&lt;br /&gt;
 vzctl set &amp;lt;CTID&amp;gt; --netif_del &amp;lt;dev_name&amp;gt;|all&lt;br /&gt;
&lt;br /&gt;
Here&lt;br /&gt;
* &amp;lt;code&amp;gt;dev_name&amp;lt;/code&amp;gt; is the Ethernet device name in the [[CT]].&lt;br /&gt;
&lt;br /&gt;
{{Note|If you want to remove all Ethernet devices in CT, use &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --netif_del eth0 --save&lt;br /&gt;
&lt;br /&gt;
==== syntax vzctl version &amp;lt; 3.0.14 ====&lt;br /&gt;
&lt;br /&gt;
 vzctl set &amp;lt;CTID&amp;gt; --veth_del &amp;lt;dev_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here &amp;lt;tt&amp;gt;dev_name&amp;lt;/tt&amp;gt; is the Ethernet device name in the [[CT0|host system]].&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --veth_del veth101.0 --save&lt;br /&gt;
&lt;br /&gt;
After executing this command veth device with host-side Ethernet name&lt;br /&gt;
&amp;lt;code&amp;gt;veth101.0&amp;lt;/code&amp;gt; will be removed from CT101 and veth configuration&lt;br /&gt;
will be updated in CT config file.&lt;br /&gt;
&lt;br /&gt;
== Common configurations with virtual Ethernet devices ==&lt;br /&gt;
Module &amp;lt;tt&amp;gt;vzethdev&amp;lt;/tt&amp;gt; must be loaded to operate with veth devices.&lt;br /&gt;
&lt;br /&gt;
=== Simple configuration with virtual Ethernet device ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have 192.168.0.0/24 on your LAN, you will learn how to integrate a container in this LAN using veth.&lt;br /&gt;
&lt;br /&gt;
==== Start a CT ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl start 101&lt;br /&gt;
&lt;br /&gt;
==== Add veth device to CT ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl set 101 --netif_add eth0 --save&lt;br /&gt;
&lt;br /&gt;
This allocates a MAC address and associates it with the host eth0 port.&lt;br /&gt;
&lt;br /&gt;
==== Configure devices in CT0 ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# ifconfig veth101.0 0&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/veth101.0/forwarding&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/veth101.0/proxy_arp&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/eth0/forwarding&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/eth0/proxy_arp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configure device in CT ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# vzctl enter 101&lt;br /&gt;
[ve-101]# /sbin/ifconfig eth0 0&lt;br /&gt;
[ve-101]# /sbin/ip addr add 192.168.0.101 dev eth0&lt;br /&gt;
[ve-101]# /sbin/ip route add default dev eth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* Until you ifconfig eth0 it won't appear. When you do it will use the mac address netif_add added earlier&lt;br /&gt;
* 192.168.0.101 is chosen to be an [[unrouteable private ip address]]. Where 101 reminds you that it is node 101.&lt;br /&gt;
* The &amp;quot;ip route&amp;quot; tells all traffic to head to &amp;quot;device eth0&amp;quot;&lt;br /&gt;
* In theory you could [[use dhcpd with OpenVZ]] and dhclient to pick up an DHCP address from your router instead of hardwiring it&lt;br /&gt;
** http://openvz.org/pipermail/users/2005-November/000020.html&lt;br /&gt;
&lt;br /&gt;
==== Add route in [[CT0]] ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# ip route add 192.168.0.101 dev veth101.0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using a directly routed IPv4 with virtual Ethernet device ===&lt;br /&gt;
&lt;br /&gt;
==== Situation ====&lt;br /&gt;
Hardware Node (HN/CT0) has 192.168.0.1/24 with router 192.168.0.254.&lt;br /&gt;
&lt;br /&gt;
We also know that IPv4 10.0.0.1/32 is directly routed to 192.168.0.1 (this is called a ''fail-over IP'').&lt;br /&gt;
&lt;br /&gt;
We want to give this directly routed IPv4 address to a container (CT).&lt;br /&gt;
&lt;br /&gt;
==== Start container ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl start 101&lt;br /&gt;
&lt;br /&gt;
==== Add veth device to CT ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl set 101 --netif_add eth0 --save&lt;br /&gt;
&lt;br /&gt;
This allocates a MAC address and associates it with the host eth0 port.&lt;br /&gt;
&lt;br /&gt;
==== Configure device and add route in CT0 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# ifconfig veth101.0 0&lt;br /&gt;
[host-node]# ip route add 10.0.0.1 dev veth101.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can automatize this at VPS creation by using a mount script &amp;lt;tt&amp;gt;$VEID.mount&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The problem here is that the ''veth'' interface appears in CT0 '''after''' VPS has started, therefore we cannot directly use the commands in the mount script. We launch a shell script (enclosed by { }) in background (operator '''&amp;amp;''') that waits for the interface to be ready and then adds the IP route.&lt;br /&gt;
&lt;br /&gt;
Contents of the mount script &amp;lt;tt&amp;gt;/etc/vz/conf/101.mount&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# This script source VPS configuration files in the same order as vzctl does&lt;br /&gt;
&lt;br /&gt;
# if one of these files does not exist then something is really broken&lt;br /&gt;
[ -f /etc/vz/vz.conf ] || exit 1&lt;br /&gt;
[ -f $VE_CONFFILE ] || exit 1&lt;br /&gt;
&lt;br /&gt;
# source both files. Note the order, it is important&lt;br /&gt;
. /etc/vz/vz.conf&lt;br /&gt;
. $VE_CONFFILE&lt;br /&gt;
&lt;br /&gt;
# Configure veth with IP after VPS has started&lt;br /&gt;
{&lt;br /&gt;
  IP=X.Y.Z.T&lt;br /&gt;
  DEV=veth101.0&lt;br /&gt;
  while sleep 1; do&lt;br /&gt;
    /sbin/ifconfig $DEV 0 &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
    if [ $? -eq 0 ]; then&lt;br /&gt;
      /sbin/ip route add $IP dev $DEV&lt;br /&gt;
      break&lt;br /&gt;
    fi&lt;br /&gt;
  done&lt;br /&gt;
} &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Make sure IPv4 forwarding is enabled in CT0 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/eth0/forwarding&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/veth101.0/forwarding&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can permanently set this by using &amp;lt;tt&amp;gt;/etc/sysctl.conf&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Configure device in CT ====&lt;br /&gt;
&lt;br /&gt;
1. Configure IP address&lt;br /&gt;
&lt;br /&gt;
2. Add gateway&lt;br /&gt;
&lt;br /&gt;
3. Add default route&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ve-101]# /sbin/ifconfig eth0 10.0.0.1 netmask 255.255.255.255&lt;br /&gt;
[ve-101]# /sbin/ip route add 192.168.0.1 dev eth0&lt;br /&gt;
[ve-101]# /sbin/ip route default via 192.168.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a Debian container, you can configure this permanently by using &amp;lt;tt&amp;gt;/etc/network/interfaces&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 10.0.0.1&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        up /sbin/ip route add 192.168.0.1 dev eth0&lt;br /&gt;
        up /sbin/ip route add default via 192.168.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Virtual Ethernet device with IPv6 ===&lt;br /&gt;
&lt;br /&gt;
==== Start a [[CT]] ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl start 101&lt;br /&gt;
&lt;br /&gt;
==== Add veth device to the [[CT]] ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl set 101 --veth_add eth0,00:12:34:56:78:9A,eth0,00:12:34:56:78:9B --save&lt;br /&gt;
&lt;br /&gt;
==== Configure devices in the [[CT0]] ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# ifconfig veth101.0 0&lt;br /&gt;
 [host-node]# echo 1 &amp;gt; /proc/sys/net/ipv6/conf/veth101.0/forwarding&lt;br /&gt;
 [host-node]# echo 1 &amp;gt; /proc/sys/net/ipv6/conf/eth0/forwarding&lt;br /&gt;
 [host-node]# echo 1 &amp;gt; /proc/sys/net/ipv6/conf/all/forwarding&lt;br /&gt;
&lt;br /&gt;
==== Configure device in [[CT]] ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl enter 101&lt;br /&gt;
 [ve-101]# /sbin/ifconfig eth0 0&lt;br /&gt;
&lt;br /&gt;
==== Start router advertisement daemon (radvd) for IPv6 in CT0 ====&lt;br /&gt;
First you need to edit radvd configuration file. Here is a simple example of &amp;lt;tt&amp;gt;/etc/radv.conf&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface veth101.0&lt;br /&gt;
{&lt;br /&gt;
        AdvSendAdvert on;&lt;br /&gt;
        MinRtrAdvInterval 3;&lt;br /&gt;
        MaxRtrAdvInterval 10;&lt;br /&gt;
        AdvHomeAgentFlag off;&lt;br /&gt;
&lt;br /&gt;
        prefix 3ffe:2400:0:0::/64&lt;br /&gt;
        {&lt;br /&gt;
                AdvOnLink on;&lt;br /&gt;
                AdvAutonomous on;&lt;br /&gt;
                AdvRouterAddr off;&lt;br /&gt;
        };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
interface eth0&lt;br /&gt;
{&lt;br /&gt;
        AdvSendAdvert on;&lt;br /&gt;
        MinRtrAdvInterval 3;&lt;br /&gt;
        MaxRtrAdvInterval 10;&lt;br /&gt;
        AdvHomeAgentFlag off;&lt;br /&gt;
&lt;br /&gt;
        prefix 3ffe:0302:0011:0002::/64&lt;br /&gt;
        {&lt;br /&gt;
                AdvOnLink on;&lt;br /&gt;
                AdvAutonomous on;&lt;br /&gt;
                AdvRouterAddr off;&lt;br /&gt;
        };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, start radvd:&lt;br /&gt;
&lt;br /&gt;
 [host-node]# /etc/init.d/radvd start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Add IPv6 addresses to devices in [[CT0]] ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# ip addr add dev veth101.0 3ffe:2400::212:34ff:fe56:789a/64&lt;br /&gt;
[host-node]# ip addr add dev eth0 3ffe:0302:0011:0002:211:22ff:fe33:4455/64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Virtual Ethernet devices can be joined in one bridge ===&lt;br /&gt;
Perform steps 1 - 4 from Simple configuration chapter for several containers and/or veth devices&lt;br /&gt;
&lt;br /&gt;
==== Create bridge device ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# brctl addbr vzbr0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Add veth devices to bridge ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# brctl addif vzbr0 veth101.0&lt;br /&gt;
...&lt;br /&gt;
[host-node]# brctl addif vzbr0 veth101.n&lt;br /&gt;
[host-node]# brctl addif vzbr0 veth102.0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
[host-node]# brctl addif vzbr0 vethXXX.N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configure bridge device ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# ifconfig vzbr0 0&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/vzbr0/forwarding&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/vzbr0/proxy_arp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Add routes in [[CT0]] ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# ip route add 192.168.101.1 dev vzbr0&lt;br /&gt;
...&lt;br /&gt;
[host-node]# ip route add 192.168.101.n dev vzbr0&lt;br /&gt;
[host-node]# ip route add 192.168.102.1 dev vzbr0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
[host-node]# ip route add 192.168.XXX.N dev vzbr0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus you'll have more convinient configuration, i.e. all routes to containers will be through this bridge and containers can communicate with each other even without these routes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Making a veth-device persistent ===&lt;br /&gt;
According to http://bugzilla.openvz.org/show_bug.cgi?id=301 , a bug that stopped the veth device persistent was &amp;quot;Obsoleted now when --veth_add/--veth_del are introduced&amp;quot;&lt;br /&gt;
&lt;br /&gt;
See http://wiki.openvz.org/w/index.php?title=Virtual_Ethernet_device&amp;amp;diff=5990&amp;amp;oldid=5989#Making_a_veth-device_persistent for a workaround that used to be described in this section.&lt;br /&gt;
&lt;br /&gt;
That's it! At this point, when you restart the CT you should see a new line in the output, indicating that the interface is being configured and a new route being added. And you should be able to ping the host, and to enter the CT and use the network.&lt;br /&gt;
&lt;br /&gt;
=== Making a bridged veth-device persistent ===&lt;br /&gt;
&lt;br /&gt;
Like the above example, here it is how to add the veth device to a bridge in a persistent way. &lt;br /&gt;
&lt;br /&gt;
==== method for vzctl version &amp;gt; 3.0.22 ====&lt;br /&gt;
&lt;br /&gt;
Newer versions of vzctl includes a 'vznetaddbr' script, which makes use of the new &amp;lt;bridge&amp;gt; parameter of the --netif_add switch.&lt;br /&gt;
&lt;br /&gt;
Just create /etc/vz/vznet.conf containing the following.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
EXTERNAL_SCRIPT=&amp;quot;/usr/sbin/vznetaddbr&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script uses 'vmbr0' as default bridge name when no bridge is specified.&lt;br /&gt;
&lt;br /&gt;
==== method for vzctl version &amp;lt;= 3.0.22 ====&lt;br /&gt;
&lt;br /&gt;
Older vzctl doesn't offer an automatic function to do this.&lt;br /&gt;
&lt;br /&gt;
1. First, edit the CT's configuration to specify what is the host bridge , and to indicate that a custom script should be run when starting up a CT.&lt;br /&gt;
* Open up /etc/vz/conf/CTID.conf&lt;br /&gt;
* Comment out any IP_ADDRESS entries to prevent a CTNET-device from being created in the CT&lt;br /&gt;
* Add or change the entry CONFIG_CUSTOMIZED=&amp;quot;yes&amp;quot;&lt;br /&gt;
* Add an entry VZHOSTBR=&amp;quot;&amp;lt;bridge if&amp;gt;&amp;quot; which is the bridge interface (already configured and up), you want to extend.&lt;br /&gt;
&lt;br /&gt;
2. Now to create that &amp;quot;custom script&amp;quot;. The following helper script will check the configuration file for the bridge interface name and for the veth interface, and add the interface to the bridge. Create the script /usr/sbin/vznetaddbr to have the following, and then &amp;lt;code&amp;gt;chmod 0500 /usr/sbin/vznetaddbr&amp;lt;/code&amp;gt; to make it executable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# /usr/sbin/vznetaddbr&lt;br /&gt;
# a script to add virtual network interfaces (veth's) in a CT to a bridge on CT0&lt;br /&gt;
&lt;br /&gt;
CONFIGFILE=/etc/vz/conf/$VEID.conf&lt;br /&gt;
. $CONFIGFILE&lt;br /&gt;
VZHOSTIF=`echo $NETIF |sed 's/^.*host_ifname=\(.*\),.*$/\1/g'`&lt;br /&gt;
&lt;br /&gt;
if [ ! -n &amp;quot;$VZHOSTIF&amp;quot; ]; then&lt;br /&gt;
   echo &amp;quot;According to $CONFIGFILE CT$VEID has no veth interface configured.&amp;quot;&lt;br /&gt;
   exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -n &amp;quot;$VZHOSTBR&amp;quot; ]; then&lt;br /&gt;
   echo &amp;quot;According to $CONFIGFILE CT$VEID has no bridge interface configured.&amp;quot;&lt;br /&gt;
   exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Adding interface $VZHOSTIF to bridge $VZHOSTBR on CT0 for CT$VEID&amp;quot;&lt;br /&gt;
/sbin/ifconfig $VZHOSTIF 0&lt;br /&gt;
echo 1 &amp;gt; /proc/sys/net/ipv4/conf/$VZHOSTIF/proxy_arp&lt;br /&gt;
echo 1 &amp;gt; /proc/sys/net/ipv4/conf/$VZHOSTIF/forwarding&lt;br /&gt;
/usr/sbin/brctl addif $VZHOSTBR $VZHOSTIF&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Now create /etc/vz/vznet.conf containing the following. This is what defines the &amp;quot;custom script&amp;quot; as being the vznetaddbr which you just created.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
EXTERNAL_SCRIPT=&amp;quot;/usr/sbin/vznetaddbr&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This may not work for particularily old versions of vzctl, e.g., the version 3.0.11 that ships with Debian Etch. For those versions, you can try a hack: Use the custom script &amp;lt;code&amp;gt;/etc/vz/conf/$VID.mount&amp;lt;/code&amp;gt; which is available, even in these old versions. But it gets called too early, before the networking has been set up. But it can start some background process, which waits and occasionally polls until $VZHOSTIF has become available. Here is one way to go about it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
CONFIGFILE=&amp;quot;/etc/vz/conf/$VEID.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$CONFIGFILE&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
   . &amp;quot;$CONFIGFILE&amp;quot;&lt;br /&gt;
   VZHOSTIF=`echo $NETIF |sed 's/^.*host_ifname=\(.*\),.*$/\1/g'`&lt;br /&gt;
   export VZHOSTIF&lt;br /&gt;
   export VZHOSTBR&lt;br /&gt;
&lt;br /&gt;
   # Fork into the background and try a few times,&lt;br /&gt;
   # until the host side of the interface appears:&lt;br /&gt;
   /bin/bash -c 'for i in 5 10 20 40 80 160&lt;br /&gt;
     do&lt;br /&gt;
        if ifconfig -a | grep -q &amp;quot;$VZHOSTIF&amp;quot;&lt;br /&gt;
        then&lt;br /&gt;
           exec /usr/sbin/vznetaddbr&lt;br /&gt;
        else&lt;br /&gt;
           sleep &amp;quot;$i&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
     done&lt;br /&gt;
   ' &amp;amp;&lt;br /&gt;
&lt;br /&gt;
   # In the meantime, let the CT's start process continue,&lt;br /&gt;
   # or else the interface will never appear:&lt;br /&gt;
   exit 0&lt;br /&gt;
else&lt;br /&gt;
   $0: Config file &amp;quot;$CONFIGFILE&amp;quot; does not exist.&lt;br /&gt;
   exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Of course, the CT's operating system will need to have . Consult the manual for your CT's OS for details.&lt;br /&gt;
&lt;br /&gt;
When the CT is started, the veth specified in the NETIF value is added to the bridge specified. You can check this by doing &amp;lt;code&amp;gt;brctl show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside the CT you can configure the interface statically or using dhcp, as a real interface attached to a switch on the lan.&lt;br /&gt;
&lt;br /&gt;
=== Virtual Ethernet devices + VLAN ===&lt;br /&gt;
This configuration can be done by adding vlan device to the previous configuration.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Virtual network device]]&lt;br /&gt;
* [[Differences between venet and veth]]&lt;br /&gt;
* [[Using private IPs for Hardware Nodes]]&lt;br /&gt;
* Patch: [[Disable venet interface]]&lt;br /&gt;
* Troubleshooting: [[Bridge doesn't forward packets]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/hints-daemons-radvd.html Linux IPv6 HOWTO, a chapter about radvd]&lt;br /&gt;
* [http://vireso.blogspot.com/2008/02/2-veth-with-2-brindges-on-openvz-at.html 2 veth with 2 bridges setup]&lt;br /&gt;
&lt;br /&gt;
[[Category: Networking]]&lt;br /&gt;
[[Category: HOWTO]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Virtual_Ethernet_device&amp;diff=8038</id>
		<title>Virtual Ethernet device</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Virtual_Ethernet_device&amp;diff=8038"/>
		<updated>2010-01-01T20:54:12Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: /* syntax vzctl version &amp;gt; 3.0.22 */  no bridge support in 3.0.22&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Virtual Ethernet device''' is an Ethernet-like device which can be used&lt;br /&gt;
inside a [[container]]. Unlike [[venet]] network device, [[veth]] device&lt;br /&gt;
has a MAC address, therefore it can be used in configurations, when veth&lt;br /&gt;
is bridged to ethX or other device and container's user fully sets up&lt;br /&gt;
his networking himself, including IPs, gateways etc.&lt;br /&gt;
&lt;br /&gt;
Virtual Ethernet device consist of two Ethernet devices --&lt;br /&gt;
the one in [[CT0]] and another one in CT. These devices are connected&lt;br /&gt;
to each other, so if a packet goes to one&lt;br /&gt;
device it will come out from the other device.&lt;br /&gt;
&lt;br /&gt;
== Virtual Ethernet device usage ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel module ===&lt;br /&gt;
First of all, make sure the &amp;lt;code&amp;gt;vzethdev&amp;lt;/code&amp;gt; module is loaded:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# lsmod | grep vzeth&lt;br /&gt;
vzethdev                8224  0&lt;br /&gt;
vzmon                  35164  5 vzethdev,vznetdev,vzrst,vzcpt&lt;br /&gt;
vzdev                   3080  4 vzethdev,vznetdev,vzmon,vzdquota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case it is not loaded, load it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# modprobe vzethdev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|in vzctl &amp;lt; 3.0.11, vzethdev is not autoloaded by &amp;lt;code&amp;gt;/etc/init.d/vz&amp;lt;/code&amp;gt; script, so you have to edit it to load this module.}}&lt;br /&gt;
&lt;br /&gt;
=== MAC addresses ===&lt;br /&gt;
In the below commands, you should use random MAC addresses. Do not use MAC addresses of real eth devices, because this can lead to collisions.&lt;br /&gt;
&lt;br /&gt;
MAC addresses must be entered in XX:XX:XX:XX:XX:XX format.&lt;br /&gt;
&lt;br /&gt;
YOU MAY NOT NEED TO GENERATE MAC ADDRESSES BY HAND BECAUSE vzctl --veth_add&lt;br /&gt;
MAY GENERATE THEM AUTOMATICALLY AS NECESSARY.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, there is a utility script available for generating MAC addresses: http://www.easyvmx.com/software/easymac.sh. It is to be used like this:&lt;br /&gt;
&lt;br /&gt;
 chmod +x easymac.sh&lt;br /&gt;
 ./easymac.sh -R&lt;br /&gt;
&lt;br /&gt;
=== Adding veth to a CT ===&lt;br /&gt;
&lt;br /&gt;
==== syntax vzctl version &amp;gt; 3.0.23 ====&lt;br /&gt;
&lt;br /&gt;
 vzctl set &amp;lt;CTID&amp;gt; --netif_add &amp;lt;ifname&amp;gt;[,&amp;lt;mac&amp;gt;,&amp;lt;host_ifname&amp;gt;,&amp;lt;host_mac&amp;gt;,&amp;lt;bridge&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Here&lt;br /&gt;
* &amp;lt;tt&amp;gt;ifname&amp;lt;/tt&amp;gt; is the Ethernet device name in the CT&lt;br /&gt;
* &amp;lt;tt&amp;gt;mac&amp;lt;/tt&amp;gt; is its MAC address in the CT&lt;br /&gt;
* &amp;lt;tt&amp;gt;host_ifname&amp;lt;/tt&amp;gt;  is the Ethernet device name on the host ([[CT0]])&lt;br /&gt;
* &amp;lt;tt&amp;gt;host_mac&amp;lt;/tt&amp;gt; is its MAC address on the host ([[CT0]])&lt;br /&gt;
* &amp;lt;tt&amp;gt;bridge&amp;lt;/tt&amp;gt; is an optional parameter which can be used in custom network start scripts to automatically add  the interface to a bridge.&lt;br /&gt;
&lt;br /&gt;
{{Note|All parameters except &amp;lt;code&amp;gt;ifname&amp;lt;/code&amp;gt; are optional and are automatically generated if not specified.}}&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --netif_add eth0 --save&lt;br /&gt;
&lt;br /&gt;
Or, if you want to specify everything:&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --netif_add eth0,00:12:34:56:78:9A,veth101.0,00:12:34:56:78:9B --save&lt;br /&gt;
&lt;br /&gt;
Or, if you want to specify the bridge and leave the other values autogenerated:&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --netif_add eth0,,,,vmbr1 --save&lt;br /&gt;
&lt;br /&gt;
==== syntax vzctl version &amp;gt;= 3.0.14 ====&lt;br /&gt;
&lt;br /&gt;
Syntax is the same as above, but without a &amp;lt;bridge&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
==== syntax vzctl version &amp;lt; 3.0.14 ====&lt;br /&gt;
&lt;br /&gt;
 vzctl set &amp;lt;CTID&amp;gt; --veth_add &amp;lt;dev_name&amp;gt;,&amp;lt;dev_addr&amp;gt;,&amp;lt;ve_dev_name&amp;gt;,&amp;lt;ve_dev_addr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here &lt;br /&gt;
* &amp;lt;tt&amp;gt;dev_name&amp;lt;/tt&amp;gt; is the Ethernet device name that you are creating on the [[CT0|host system]]&lt;br /&gt;
* &amp;lt;tt&amp;gt;dev_addr&amp;lt;/tt&amp;gt; is its MAC address&lt;br /&gt;
* &amp;lt;tt&amp;gt;ve_dev_name&amp;lt;/tt&amp;gt; is the corresponding Ethernet device name you are creating on the CT&lt;br /&gt;
* &amp;lt;tt&amp;gt;ve_dev_addr&amp;lt;/tt&amp;gt; is its MAC address&lt;br /&gt;
&lt;br /&gt;
{{Note|this option is incremental, so devices are added to already existing ones.}}&lt;br /&gt;
&lt;br /&gt;
NB there should no spaces after the commas.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node] ifconfig eth0&lt;br /&gt;
...&lt;br /&gt;
HWaddress 00:12:34:56:78:9B&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [host-node] easymac.sh -R&lt;br /&gt;
 00:12:34:56:78:9A&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --veth_add veth101.0,00:12:34:56:78:9A,eth0,00:12:34:56:78:9B --save&lt;br /&gt;
&lt;br /&gt;
After executing this command &amp;lt;tt&amp;gt;veth&amp;lt;/tt&amp;gt; device will be created for CT 101 and veth configuration will be saved to a CT configuration file.&lt;br /&gt;
Host-side Ethernet device will have &amp;lt;tt&amp;gt;veth101.0&amp;lt;/tt&amp;gt; name and &amp;lt;tt&amp;gt;00:12:34:56:78:9A&amp;lt;/tt&amp;gt; MAC address.&lt;br /&gt;
CT-side Ethernet device will have &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt; name and &amp;lt;tt&amp;gt;00:12:34:56:78:9B&amp;lt;/tt&amp;gt; MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Removing veth from a CT ===&lt;br /&gt;
&lt;br /&gt;
==== syntax vzctl version &amp;gt;= 3.0.14 ====&lt;br /&gt;
&lt;br /&gt;
 vzctl set &amp;lt;CTID&amp;gt; --netif_del &amp;lt;dev_name&amp;gt;|all&lt;br /&gt;
&lt;br /&gt;
Here&lt;br /&gt;
* &amp;lt;code&amp;gt;dev_name&amp;lt;/code&amp;gt; is the Ethernet device name in the [[CT]].&lt;br /&gt;
&lt;br /&gt;
{{Note|If you want to remove all Ethernet devices in CT, use &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --netif_del eth0 --save&lt;br /&gt;
&lt;br /&gt;
==== syntax vzctl version &amp;lt; 3.0.14 ====&lt;br /&gt;
&lt;br /&gt;
 vzctl set &amp;lt;CTID&amp;gt; --veth_del &amp;lt;dev_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here &amp;lt;tt&amp;gt;dev_name&amp;lt;/tt&amp;gt; is the Ethernet device name in the [[CT0|host system]].&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 vzctl set 101 --veth_del veth101.0 --save&lt;br /&gt;
&lt;br /&gt;
After executing this command veth device with host-side Ethernet name&lt;br /&gt;
&amp;lt;code&amp;gt;veth101.0&amp;lt;/code&amp;gt; will be removed from CT101 and veth configuration&lt;br /&gt;
will be updated in CT config file.&lt;br /&gt;
&lt;br /&gt;
== Common configurations with virtual Ethernet devices ==&lt;br /&gt;
Module &amp;lt;tt&amp;gt;vzethdev&amp;lt;/tt&amp;gt; must be loaded to operate with veth devices.&lt;br /&gt;
&lt;br /&gt;
=== Simple configuration with virtual Ethernet device ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have 192.168.0.0/24 on your LAN, you will learn how to integrate a container in this LAN using veth.&lt;br /&gt;
&lt;br /&gt;
==== Start a CT ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl start 101&lt;br /&gt;
&lt;br /&gt;
==== Add veth device to CT ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl set 101 --netif_add eth0 --save&lt;br /&gt;
&lt;br /&gt;
This allocates a MAC address and associates it with the host eth0 port.&lt;br /&gt;
&lt;br /&gt;
==== Configure devices in CT0 ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# ifconfig veth101.0 0&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/veth101.0/forwarding&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/veth101.0/proxy_arp&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/eth0/forwarding&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/eth0/proxy_arp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configure device in CT ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# vzctl enter 101&lt;br /&gt;
[ve-101]# /sbin/ifconfig eth0 0&lt;br /&gt;
[ve-101]# /sbin/ip addr add 192.168.0.101 dev eth0&lt;br /&gt;
[ve-101]# /sbin/ip route add default dev eth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* Until you ifconfig eth0 it won't appear. When you do it will use the mac address netif_add added earlier&lt;br /&gt;
* 192.168.0.101 is chosen to be an [[unrouteable private ip address]]. Where 101 reminds you that it is node 101.&lt;br /&gt;
* The &amp;quot;ip route&amp;quot; tells all traffic to head to &amp;quot;device eth0&amp;quot;&lt;br /&gt;
* In theory you could [[use dhcpd with OpenVZ]] and dhclient to pick up an DHCP address from your router instead of hardwiring it&lt;br /&gt;
** http://openvz.org/pipermail/users/2005-November/000020.html&lt;br /&gt;
&lt;br /&gt;
==== Add route in [[CT0]] ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# ip route add 192.168.0.101 dev veth101.0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using a directly routed IPv4 with virtual Ethernet device ===&lt;br /&gt;
&lt;br /&gt;
==== Situation ====&lt;br /&gt;
Hardware Node (HN/CT0) has 192.168.0.1/24 with router 192.168.0.254.&lt;br /&gt;
&lt;br /&gt;
We also know that IPv4 10.0.0.1/32 is directly routed to 192.168.0.1 (this is called a ''fail-over IP'').&lt;br /&gt;
&lt;br /&gt;
We want to give this directly routed IPv4 address to a container (CT).&lt;br /&gt;
&lt;br /&gt;
==== Start container ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl start 101&lt;br /&gt;
&lt;br /&gt;
==== Add veth device to CT ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl set 101 --netif_add eth0 --save&lt;br /&gt;
&lt;br /&gt;
This allocates a MAC address and associates it with the host eth0 port.&lt;br /&gt;
&lt;br /&gt;
==== Configure device and add route in CT0 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# ifconfig veth101.0 0&lt;br /&gt;
[host-node]# ip route add 10.0.0.1 dev veth101.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can automatize this at VPS creation by using a mount script &amp;lt;tt&amp;gt;$VEID.mount&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The problem here is that the ''veth'' interface appears in CT0 '''after''' VPS has started, therefore we cannot directly use the commands in the mount script. We launch a shell script (enclosed by { }) in background (operator '''&amp;amp;''') that waits for the interface to be ready and then adds the IP route.&lt;br /&gt;
&lt;br /&gt;
Contents of the mount script &amp;lt;tt&amp;gt;/etc/vz/conf/101.mount&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# This script source VPS configuration files in the same order as vzctl does&lt;br /&gt;
&lt;br /&gt;
# if one of these files does not exist then something is really broken&lt;br /&gt;
[ -f /etc/vz/vz.conf ] || exit 1&lt;br /&gt;
[ -f $VE_CONFFILE ] || exit 1&lt;br /&gt;
&lt;br /&gt;
# source both files. Note the order, it is important&lt;br /&gt;
. /etc/vz/vz.conf&lt;br /&gt;
. $VE_CONFFILE&lt;br /&gt;
&lt;br /&gt;
# Configure veth with IP after VPS has started&lt;br /&gt;
{&lt;br /&gt;
  IP=X.Y.Z.T&lt;br /&gt;
  DEV=veth101.0&lt;br /&gt;
  while sleep 1; do&lt;br /&gt;
    /sbin/ifconfig $DEV 0 &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
    if [ $? -eq 0 ]; then&lt;br /&gt;
      /sbin/ip route add $IP dev $DEV&lt;br /&gt;
      break&lt;br /&gt;
    fi&lt;br /&gt;
  done&lt;br /&gt;
} &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Make sure IPv4 forwarding is enabled in CT0 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/eth0/forwarding&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/veth101.0/forwarding&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can permanently set this by using &amp;lt;tt&amp;gt;/etc/sysctl.conf&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Configure device in CT ====&lt;br /&gt;
&lt;br /&gt;
1. Configure IP address&lt;br /&gt;
&lt;br /&gt;
2. Add gateway&lt;br /&gt;
&lt;br /&gt;
3. Add default route&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ve-101]# /sbin/ifconfig eth0 10.0.0.1 netmask 255.255.255.255&lt;br /&gt;
[ve-101]# /sbin/ip route add 192.168.0.1 dev eth0&lt;br /&gt;
[ve-101]# /sbin/ip route default via 192.168.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a Debian container, you can configure this permanently by using &amp;lt;tt&amp;gt;/etc/network/interfaces&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 10.0.0.1&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        up /sbin/ip route add 192.168.0.1 dev eth0&lt;br /&gt;
        up /sbin/ip route add default via 192.168.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Virtual Ethernet device with IPv6 ===&lt;br /&gt;
&lt;br /&gt;
==== Start a [[CT]] ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl start 101&lt;br /&gt;
&lt;br /&gt;
==== Add veth device to the [[CT]] ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl set 101 --veth_add eth0,00:12:34:56:78:9A,eth0,00:12:34:56:78:9B --save&lt;br /&gt;
&lt;br /&gt;
==== Configure devices in the [[CT0]] ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# ifconfig veth101.0 0&lt;br /&gt;
 [host-node]# echo 1 &amp;gt; /proc/sys/net/ipv6/conf/veth101.0/forwarding&lt;br /&gt;
 [host-node]# echo 1 &amp;gt; /proc/sys/net/ipv6/conf/eth0/forwarding&lt;br /&gt;
 [host-node]# echo 1 &amp;gt; /proc/sys/net/ipv6/conf/all/forwarding&lt;br /&gt;
&lt;br /&gt;
==== Configure device in [[CT]] ====&lt;br /&gt;
&lt;br /&gt;
 [host-node]# vzctl enter 101&lt;br /&gt;
 [ve-101]# /sbin/ifconfig eth0 0&lt;br /&gt;
&lt;br /&gt;
==== Start router advertisement daemon (radvd) for IPv6 in CT0 ====&lt;br /&gt;
First you need to edit radvd configuration file. Here is a simple example of &amp;lt;tt&amp;gt;/etc/radv.conf&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface veth101.0&lt;br /&gt;
{&lt;br /&gt;
        AdvSendAdvert on;&lt;br /&gt;
        MinRtrAdvInterval 3;&lt;br /&gt;
        MaxRtrAdvInterval 10;&lt;br /&gt;
        AdvHomeAgentFlag off;&lt;br /&gt;
&lt;br /&gt;
        prefix 3ffe:2400:0:0::/64&lt;br /&gt;
        {&lt;br /&gt;
                AdvOnLink on;&lt;br /&gt;
                AdvAutonomous on;&lt;br /&gt;
                AdvRouterAddr off;&lt;br /&gt;
        };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
interface eth0&lt;br /&gt;
{&lt;br /&gt;
        AdvSendAdvert on;&lt;br /&gt;
        MinRtrAdvInterval 3;&lt;br /&gt;
        MaxRtrAdvInterval 10;&lt;br /&gt;
        AdvHomeAgentFlag off;&lt;br /&gt;
&lt;br /&gt;
        prefix 3ffe:0302:0011:0002::/64&lt;br /&gt;
        {&lt;br /&gt;
                AdvOnLink on;&lt;br /&gt;
                AdvAutonomous on;&lt;br /&gt;
                AdvRouterAddr off;&lt;br /&gt;
        };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, start radvd:&lt;br /&gt;
&lt;br /&gt;
 [host-node]# /etc/init.d/radvd start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Add IPv6 addresses to devices in [[CT0]] ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# ip addr add dev veth101.0 3ffe:2400::212:34ff:fe56:789a/64&lt;br /&gt;
[host-node]# ip addr add dev eth0 3ffe:0302:0011:0002:211:22ff:fe33:4455/64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Virtual Ethernet devices can be joined in one bridge ===&lt;br /&gt;
Perform steps 1 - 4 from Simple configuration chapter for several containers and/or veth devices&lt;br /&gt;
&lt;br /&gt;
==== Create bridge device ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# brctl addbr vzbr0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Add veth devices to bridge ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# brctl addif vzbr0 veth101.0&lt;br /&gt;
...&lt;br /&gt;
[host-node]# brctl addif vzbr0 veth101.n&lt;br /&gt;
[host-node]# brctl addif vzbr0 veth102.0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
[host-node]# brctl addif vzbr0 vethXXX.N&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configure bridge device ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# ifconfig vzbr0 0&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/vzbr0/forwarding&lt;br /&gt;
[host-node]# echo 1 &amp;gt; /proc/sys/net/ipv4/conf/vzbr0/proxy_arp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Add routes in [[CT0]] ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# ip route add 192.168.101.1 dev vzbr0&lt;br /&gt;
...&lt;br /&gt;
[host-node]# ip route add 192.168.101.n dev vzbr0&lt;br /&gt;
[host-node]# ip route add 192.168.102.1 dev vzbr0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
[host-node]# ip route add 192.168.XXX.N dev vzbr0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus you'll have more convinient configuration, i.e. all routes to containers will be through this bridge and containers can communicate with each other even without these routes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Making a veth-device persistent ===&lt;br /&gt;
According to http://bugzilla.openvz.org/show_bug.cgi?id=301 , a bug that stopped the veth device persistent was &amp;quot;Obsoleted now when --veth_add/--veth_del are introduced&amp;quot;&lt;br /&gt;
&lt;br /&gt;
See http://wiki.openvz.org/w/index.php?title=Virtual_Ethernet_device&amp;amp;diff=5990&amp;amp;oldid=5989#Making_a_veth-device_persistent for a workaround that used to be described in this section.&lt;br /&gt;
&lt;br /&gt;
That's it! At this point, when you restart the CT you should see a new line in the output, indicating that the interface is being configured and a new route being added. And you should be able to ping the host, and to enter the CT and use the network.&lt;br /&gt;
&lt;br /&gt;
=== Making a bridged veth-device persistent ===&lt;br /&gt;
&lt;br /&gt;
Like the above example, here it is how to add the veth device to a bridge in a persistent way. &lt;br /&gt;
&lt;br /&gt;
==== method for vzctl version &amp;gt; 3.0.22 ====&lt;br /&gt;
&lt;br /&gt;
Newer versions of vzctl includes a 'vznetaddbr' script, which makes use of the new &amp;lt;bridge&amp;gt; parameter of the --netif_add switch.&lt;br /&gt;
&lt;br /&gt;
Just create /etc/vz/vznet.conf containing the following.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
EXTERNAL_SCRIPT=&amp;quot;/usr/sbin/vznetaddbr&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script uses 'vmbr0' as default bridge name when no bridge is specified.&lt;br /&gt;
&lt;br /&gt;
==== method for vzctl version &amp;lt;= 3.0.22 ====&lt;br /&gt;
&lt;br /&gt;
Older vzctl doesn't offer an automatic function to do this.&lt;br /&gt;
&lt;br /&gt;
1. First, edit the CT's configuration to specify what is the host bridge , and to indicate that a custom script should be run when starting up a CT.&lt;br /&gt;
* Open up /etc/vz/conf/CTID.conf&lt;br /&gt;
* Comment out any IP_ADDRESS entries to prevent a CTNET-device from being created in the CT&lt;br /&gt;
* Add or change the entry CONFIG_CUSTOMIZED=&amp;quot;yes&amp;quot;&lt;br /&gt;
* Add an entry VZHOSTBR=&amp;quot;&amp;lt;bridge if&amp;gt;&amp;quot; which is the bridge interface (already configured and up), you want to extend.&lt;br /&gt;
&lt;br /&gt;
2. Now to create that &amp;quot;custom script&amp;quot;. The following helper script will check the configuration file for the bridge interface name and for the veth interface, and add the interface to the bridge. Create the script /usr/sbin/vznetaddbr to have the following, and then &amp;lt;code&amp;gt;chmod 0500 /usr/sbin/vznetaddbr&amp;lt;/code&amp;gt; to make it executable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# /usr/sbin/vznetaddbr&lt;br /&gt;
# a script to add virtual network interfaces (veth's) in a CT to a bridge on CT0&lt;br /&gt;
&lt;br /&gt;
CONFIGFILE=/etc/vz/conf/$VEID.conf&lt;br /&gt;
. $CONFIGFILE&lt;br /&gt;
VZHOSTIF=`echo $NETIF |sed 's/^.*host_ifname=\(.*\),.*$/\1/g'`&lt;br /&gt;
&lt;br /&gt;
if [ ! -n &amp;quot;$VZHOSTIF&amp;quot; ]; then&lt;br /&gt;
   echo &amp;quot;According to $CONFIGFILE CT$VEID has no veth interface configured.&amp;quot;&lt;br /&gt;
   exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -n &amp;quot;$VZHOSTBR&amp;quot; ]; then&lt;br /&gt;
   echo &amp;quot;According to $CONFIGFILE CT$VEID has no bridge interface configured.&amp;quot;&lt;br /&gt;
   exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Adding interface $VZHOSTIF to bridge $VZHOSTBR on CT0 for CT$VEID&amp;quot;&lt;br /&gt;
/sbin/ifconfig $VZHOSTIF 0&lt;br /&gt;
echo 1 &amp;gt; /proc/sys/net/ipv4/conf/$VZHOSTIF/proxy_arp&lt;br /&gt;
echo 1 &amp;gt; /proc/sys/net/ipv4/conf/$VZHOSTIF/forwarding&lt;br /&gt;
/usr/sbin/brctl addif $VZHOSTBR $VZHOSTIF&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Now create /etc/vz/vznet.conf containing the following. This is what defines the &amp;quot;custom script&amp;quot; as being the vznetaddbr which you just created.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
EXTERNAL_SCRIPT=&amp;quot;/usr/sbin/vznetaddbr&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This may not work for particularily old versions of vzctl, e.g., the version 3.0.11 that ships with Debian Etch. For those versions, you can try a hack: Use the custom script &amp;lt;code&amp;gt;/etc/vz/conf/$VID.mount&amp;lt;/code&amp;gt; which is available, even in these old versions. But it gets called too early, before the networking has been set up. But it can start some background process, which waits and occasionally polls until $VZHOSTIF has become available. Here is one way to go about it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
CONFIGFILE=&amp;quot;/etc/vz/conf/$VEID.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$CONFIGFILE&amp;quot; ]&lt;br /&gt;
then&lt;br /&gt;
   . &amp;quot;$CONFIGFILE&amp;quot;&lt;br /&gt;
   VZHOSTIF=`echo $NETIF |sed 's/^.*host_ifname=\(.*\),.*$/\1/g'`&lt;br /&gt;
   export VZHOSTIF&lt;br /&gt;
   export VZHOSTBR&lt;br /&gt;
&lt;br /&gt;
   # Fork into the background and try a few times,&lt;br /&gt;
   # until the host side of the interface appears:&lt;br /&gt;
   /bin/bash -c 'for i in 5 10 20 40 80 160&lt;br /&gt;
     do&lt;br /&gt;
        if ifconfig -a | grep -q &amp;quot;$VZHOSTIF&amp;quot;&lt;br /&gt;
        then&lt;br /&gt;
           exec /usr/sbin/vznetaddbr&lt;br /&gt;
        else&lt;br /&gt;
           sleep &amp;quot;$i&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
     done&lt;br /&gt;
   ' &amp;amp;&lt;br /&gt;
&lt;br /&gt;
   # In the meantime, let the CT's start process continue,&lt;br /&gt;
   # or else the interface will never appear:&lt;br /&gt;
   exit 0&lt;br /&gt;
else&lt;br /&gt;
   $0: Config file &amp;quot;$CONFIGFILE&amp;quot; does not exist.&lt;br /&gt;
   exit 1&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Of course, the CT's operating system will need to have . Consult the manual for your CT's OS for details.&lt;br /&gt;
&lt;br /&gt;
When the CT is started, the veth specified in the NETIF value is added to the bridge specified. You can check this by doing &amp;lt;code&amp;gt;brctl show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside the CT you can configure the interface statically or using dhcp, as a real interface attached to a switch on the lan.&lt;br /&gt;
&lt;br /&gt;
=== Virtual Ethernet devices + VLAN ===&lt;br /&gt;
This configuration can be done by adding vlan device to the previous configuration.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Virtual network device]]&lt;br /&gt;
* [[Differences between venet and veth]]&lt;br /&gt;
* [[Using private IPs for Hardware Nodes]]&lt;br /&gt;
* Patch: [[Disable venet interface]]&lt;br /&gt;
* Troubleshooting: [[Bridge doesn't forward packets]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/hints-daemons-radvd.html Linux IPv6 HOWTO, a chapter about radvd]&lt;br /&gt;
* [http://vireso.blogspot.com/2008/02/2-veth-with-2-brindges-on-openvz-at.html 2 veth with 2 bridges setup]&lt;br /&gt;
&lt;br /&gt;
[[Category: Networking]]&lt;br /&gt;
[[Category: HOWTO]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Virtual_network_device&amp;diff=8035</id>
		<title>Virtual network device</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Virtual_network_device&amp;diff=8035"/>
		<updated>2010-01-01T20:07:05Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: /* Limitations */  =&amp;gt; Specific aspects&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Virtual network device (&amp;lt;code&amp;gt;venet&amp;lt;/code&amp;gt;) is the default network device for a [[container]]. This network device looks like a point-to-point connection between [[container]] and the [[CT0|host system]]. It does packet switching based on IP header. This is a default network device for container (an alternative is [[veth]] device).&lt;br /&gt;
&lt;br /&gt;
Venet drop ip-packets '''from''' the container with a source address, and '''in''' the container with the destination address, which is not corresponding to an ip-address of the container.&lt;br /&gt;
&lt;br /&gt;
Venet device is created automatically on [[container]] start. Vzctl scripts set up an appropriate IP address and other settings on venet inside a container.&lt;br /&gt;
&lt;br /&gt;
==  Usage ==&lt;br /&gt;
&lt;br /&gt;
== Kernel module ==&lt;br /&gt;
First of all, check that &amp;lt;code&amp;gt;vznetdev&amp;lt;/code&amp;gt; module is loaded:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# lsmod | grep vznetdev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it is not, load the module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# modprobe vznetdev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You might want to check /etc/init.d/vz script to make sure the module gets loaded during startup.&lt;br /&gt;
&lt;br /&gt;
=== Adding IP address to a container ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set &amp;lt;CTID&amp;gt; --ipadd &amp;lt;IP1&amp;gt;[,&amp;lt;IP2&amp;gt;,...] [--save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|This option is incremental, so IP addresses are added to already existing ones.}}&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set 101 --ipadd 10.0.0.1 --save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After executing this command IP address 10.0.0.1 will be added to container 101 and IP configuration will be saved to a container configuration file.&lt;br /&gt;
&lt;br /&gt;
=== Removing IP address from a container ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set &amp;lt;CTID&amp;gt; --ipdel &amp;lt;IP1&amp;gt;[,&amp;lt;IP2&amp;gt;,...] [--save]&lt;br /&gt;
vzctl set &amp;lt;CTID&amp;gt; --ipdel all [--save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set 101 --ipdel 10.0.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After executing this command IP address 10.0.0.1 will be removed from container 101, but IP configuration will not be changed in container config file. And after container reboot IP address 10.0.0.1 will be assigned to this container again.&lt;br /&gt;
&lt;br /&gt;
== Sysctl ==&lt;br /&gt;
&lt;br /&gt;
You will need to configure some sysctl parameters to get your venet devices working.&lt;br /&gt;
Please have a look at the [[Installation_on_Debian#sysctl]] section.&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
&lt;br /&gt;
To setup IPv6 networking with venet you'll need to enable the following in your sysctl.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    # IPv6 Packet Forwarding and Proxy NDP &lt;br /&gt;
    net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
    net.ipv6.conf.all.forwarding     = 1&lt;br /&gt;
    net.ipv6.conf.default.proxy_ndp = 1&lt;br /&gt;
    net.ipv6.conf.all.proxy_ndp = 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In IPv6 you can't control forwarding per device, forwarding control has to take place in ip6tables, so all interfaces will forward IPv6 traffic. &lt;br /&gt;
&lt;br /&gt;
If you enable IPv6 forwarding for your interfaces, Linux assumes your host to act like a router and will ignore 'Router Advertisments' &lt;br /&gt;
(see [http://en.wikipedia.org/wiki/Neighbor_Discovery_Protocol Neighbor Discovery Protocol] or [http://mirrors.bieringer.de/Linux+IPv6-HOWTO/proc-sys-net-ipv6.html Linux IPv6 Howto]).&lt;br /&gt;
&lt;br /&gt;
You will as well need to configure a new v6 default gateway for your host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    ip addr add 2620:0:2d0:1::193/64 dev eth0&lt;br /&gt;
    route -6 add default gw 2620:0:2d0:1::1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add these commands to your existing network configuration on Debian/Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    iface eth0 inet static&lt;br /&gt;
        address 64.131.90.7&lt;br /&gt;
        netmask 255.255.255.240&lt;br /&gt;
        network 64.131.90.0&lt;br /&gt;
        broadcast 64.131.90.15&lt;br /&gt;
        gateway 64.131.90.1&lt;br /&gt;
        up   ip addr add 2620:0:2d0:1::193/64 dev eth0&lt;br /&gt;
        up   route -6 add default gw 2620:0:2d0:1::1&lt;br /&gt;
        down ip addr del 3620:0:2d0:1::193/64 dev eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
== Specific aspects of venet network device == &lt;br /&gt;
=== No [http://en.wikipedia.org/wiki/Address_Resolution_Protocol ARP] protocol support ===&lt;br /&gt;
Venet network device is explicitly NOARP, so there is no MAC address.&lt;br /&gt;
Consequently, it's not possible to make broadcasts inside a [[CT|container]], so software like Samba server or DHCP server, will not function (under a container with a venet network device).&amp;lt;br /&amp;gt;&lt;br /&gt;
Please consider use of [[veth]] network device if you need this feature&lt;br /&gt;
&lt;br /&gt;
=== No bridge support ===&lt;br /&gt;
Venet network device cannot be bridged together and/or with other devices.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please consider use of [[veth]] network device if you need this feature&lt;br /&gt;
&lt;br /&gt;
=== No possiblity to assign an IP from the CT ===&lt;br /&gt;
With venet device, only OpenVZ [[Hardware_Node|hardware node]] administrator can assign an IP address to a [[CT|container]].&amp;lt;br /&amp;gt;&lt;br /&gt;
Please consider use of [[veth]] network device if you need this feature&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Veth]]&lt;br /&gt;
* [[Differences between venet and veth]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Networking]]&lt;br /&gt;
[[Category: HOWTO]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Virtual_network_device&amp;diff=8034</id>
		<title>Virtual network device</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Virtual_network_device&amp;diff=8034"/>
		<updated>2010-01-01T20:04:08Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: Adding a new chapter: limitations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Virtual network device (&amp;lt;code&amp;gt;venet&amp;lt;/code&amp;gt;) is the default network device for a [[container]]. This network device looks like a point-to-point connection between [[container]] and the [[CT0|host system]]. It does packet switching based on IP header. This is a default network device for container (an alternative is [[veth]] device).&lt;br /&gt;
&lt;br /&gt;
Venet drop ip-packets '''from''' the container with a source address, and '''in''' the container with the destination address, which is not corresponding to an ip-address of the container.&lt;br /&gt;
&lt;br /&gt;
Venet device is created automatically on [[container]] start. Vzctl scripts set up an appropriate IP address and other settings on venet inside a container.&lt;br /&gt;
&lt;br /&gt;
==  Usage ==&lt;br /&gt;
&lt;br /&gt;
== Kernel module ==&lt;br /&gt;
First of all, check that &amp;lt;code&amp;gt;vznetdev&amp;lt;/code&amp;gt; module is loaded:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# lsmod | grep vznetdev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it is not, load the module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# modprobe vznetdev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You might want to check /etc/init.d/vz script to make sure the module gets loaded during startup.&lt;br /&gt;
&lt;br /&gt;
=== Adding IP address to a container ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set &amp;lt;CTID&amp;gt; --ipadd &amp;lt;IP1&amp;gt;[,&amp;lt;IP2&amp;gt;,...] [--save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|This option is incremental, so IP addresses are added to already existing ones.}}&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set 101 --ipadd 10.0.0.1 --save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After executing this command IP address 10.0.0.1 will be added to container 101 and IP configuration will be saved to a container configuration file.&lt;br /&gt;
&lt;br /&gt;
=== Removing IP address from a container ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set &amp;lt;CTID&amp;gt; --ipdel &amp;lt;IP1&amp;gt;[,&amp;lt;IP2&amp;gt;,...] [--save]&lt;br /&gt;
vzctl set &amp;lt;CTID&amp;gt; --ipdel all [--save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl set 101 --ipdel 10.0.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After executing this command IP address 10.0.0.1 will be removed from container 101, but IP configuration will not be changed in container config file. And after container reboot IP address 10.0.0.1 will be assigned to this container again.&lt;br /&gt;
&lt;br /&gt;
== Sysctl ==&lt;br /&gt;
&lt;br /&gt;
You will need to configure some sysctl parameters to get your venet devices working.&lt;br /&gt;
Please have a look at the [[Installation_on_Debian#sysctl]] section.&lt;br /&gt;
&lt;br /&gt;
== IPv6 ==&lt;br /&gt;
&lt;br /&gt;
To setup IPv6 networking with venet you'll need to enable the following in your sysctl.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    # IPv6 Packet Forwarding and Proxy NDP &lt;br /&gt;
    net.ipv6.conf.default.forwarding = 1&lt;br /&gt;
    net.ipv6.conf.all.forwarding     = 1&lt;br /&gt;
    net.ipv6.conf.default.proxy_ndp = 1&lt;br /&gt;
    net.ipv6.conf.all.proxy_ndp = 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In IPv6 you can't control forwarding per device, forwarding control has to take place in ip6tables, so all interfaces will forward IPv6 traffic. &lt;br /&gt;
&lt;br /&gt;
If you enable IPv6 forwarding for your interfaces, Linux assumes your host to act like a router and will ignore 'Router Advertisments' &lt;br /&gt;
(see [http://en.wikipedia.org/wiki/Neighbor_Discovery_Protocol Neighbor Discovery Protocol] or [http://mirrors.bieringer.de/Linux+IPv6-HOWTO/proc-sys-net-ipv6.html Linux IPv6 Howto]).&lt;br /&gt;
&lt;br /&gt;
You will as well need to configure a new v6 default gateway for your host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    ip addr add 2620:0:2d0:1::193/64 dev eth0&lt;br /&gt;
    route -6 add default gw 2620:0:2d0:1::1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add these commands to your existing network configuration on Debian/Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    iface eth0 inet static&lt;br /&gt;
        address 64.131.90.7&lt;br /&gt;
        netmask 255.255.255.240&lt;br /&gt;
        network 64.131.90.0&lt;br /&gt;
        broadcast 64.131.90.15&lt;br /&gt;
        gateway 64.131.90.1&lt;br /&gt;
        up   ip addr add 2620:0:2d0:1::193/64 dev eth0&lt;br /&gt;
        up   route -6 add default gw 2620:0:2d0:1::1&lt;br /&gt;
        down ip addr del 3620:0:2d0:1::193/64 dev eth0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
== Limitations == &lt;br /&gt;
=== No [http://en.wikipedia.org/wiki/Address_Resolution_Protocol ARP] protocol support ===&lt;br /&gt;
Venet network device is explicitly NOARP, so there is no MAC address.&lt;br /&gt;
Consequently, it's not possible to make broadcasts inside a [[CT|container]], so software like Samba server or DHCP server, will not function (under a container with a venet network device).&amp;lt;br /&amp;gt;&lt;br /&gt;
Please consider use of [[veth]] network device if you need this feature&lt;br /&gt;
&lt;br /&gt;
=== No bridge support ===&lt;br /&gt;
Venet network device cannot be bridged together and/or with other devices.&amp;lt;br /&amp;gt;&lt;br /&gt;
Please consider use of [[veth]] network device if you need this feature&lt;br /&gt;
&lt;br /&gt;
=== No possiblity to assign an IP from the CT ===&lt;br /&gt;
With venet device, only OpenVZ [[Hardware_Node|hardware node]] administrator can assign an IP address to a [[CT|container]].&amp;lt;br /&amp;gt;&lt;br /&gt;
Please consider use of [[veth]] network device if you need this feature&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Veth]]&lt;br /&gt;
* [[Differences between venet and veth]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Networking]]&lt;br /&gt;
[[Category: HOWTO]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Container_enter_failed&amp;diff=7577</id>
		<title>Container enter failed</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Container_enter_failed&amp;diff=7577"/>
		<updated>2009-10-13T13:24:31Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: Undo revision 7576 by 91.214.44.121 (Talk) =&amp;gt;spam link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Problem''': container created succesfully and started.&lt;br /&gt;
But when trying to do&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl enter 101 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
you get&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
container enter failed(?)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using strace, you see:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# strace -ff vzctl enter&lt;br /&gt;
....&lt;br /&gt;
fstat64(...st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0)...) fail&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Solution''':&lt;br /&gt;
Recompile the kernel with the following option:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CONFIG_LEGACY_PTYS=y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Other solutions''':&lt;br /&gt;
&lt;br /&gt;
1) enter the VE  manually creating the LEGACY_PTYS devices&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl exec  101 /sbin/MAKEDEV tty&lt;br /&gt;
vzctl exec 101 /sbin/MAKEDEV pty&lt;br /&gt;
vzctl enter 101&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2A) If you want udev in VE,  save the changes forcing udev to make LEGACY_PTYS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/udev/makedev.d/51-udev.nodes&lt;br /&gt;
# These device have to be created manually&lt;br /&gt;
tty0&lt;br /&gt;
tty1&lt;br /&gt;
tty2&lt;br /&gt;
tty3&lt;br /&gt;
....&lt;br /&gt;
ttyp0&lt;br /&gt;
ttyp1&lt;br /&gt;
ttyp2&lt;br /&gt;
ttyp3&lt;br /&gt;
....&lt;br /&gt;
ptyp0&lt;br /&gt;
ptyp1&lt;br /&gt;
ptyp2&lt;br /&gt;
ptyp3&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2B) If you think is better disable udev in VE, comment out in the VE the line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sbin/start_udev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc.d/rc.sysinit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.. &amp;lt;b&amp;gt;however&amp;lt;/b&amp;gt; updates to the package which owns this file may revert your changes, so you must take steps to guard against this.&lt;br /&gt;
&lt;br /&gt;
Restart the VE and make the devices with MAKEDEV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vzctl exec  101 /sbin/MAKEDEV tty&lt;br /&gt;
vzctl exec 101 /sbin/MAKEDEV pty&lt;br /&gt;
vzctl enter 101&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* {{Bug|130}}&lt;br /&gt;
* {{Bug|578}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Troubleshooting]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=6153</id>
		<title>Monitoring openvz resources using nagios and snmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_nagios_and_snmp&amp;diff=6153"/>
		<updated>2008-07-08T10:26:39Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: /* snmpd configuration */ spelling corrections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== snmpd configuration ==&lt;br /&gt;
Debian Etch example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install snmpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit '''/etc/default/snmpd''' : remove ''-u snmp'' and replace ''127.0.0.1'' with your ip (ie : 207.46.250.119), Full'''/etc/default/snmpd''' example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid 207.46.250.119'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Debian 4.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export MIBDIRS=/usr/share/snmp/mibs&lt;br /&gt;
SNMPDRUN=yes&lt;br /&gt;
SNMPDOPTS='-Lsd -Lf /dev/null  -I -smux -p /var/run/snmpd.pid'&lt;br /&gt;
TRAPDRUN=no&lt;br /&gt;
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create user(my_username) and add new mib. Password need a min. of 8 charactes. Username only characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/snmpd stop&lt;br /&gt;
echo rouser my_username priv &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.51  beancounters  /bin/cat /proc/user_beancounters&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo &amp;quot;extend  .1.3.6.1.4.1.2021.52  vzquota  /bin/cat /proc/vz/vzquota&amp;quot; &amp;gt;&amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
echo  createUser my_username MD5 my_password DES &amp;gt;&amp;gt; /var/lib/snmp/snmpd.conf&lt;br /&gt;
/etc/init.d/snmpd start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Testing snmp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
snmpwalk   -v 3  -u my_username -l authPriv   -a MD5 -A my_password -x DES -X my_password  $(hostname -i)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning: the minimum pass phrase length is 8 characters.&lt;br /&gt;
&lt;br /&gt;
== nagios configuration ==&lt;br /&gt;
=== example nagios configuration ===&lt;br /&gt;
add to configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define command {&lt;br /&gt;
command_name check_snmp_openvz_on_port&lt;br /&gt;
# command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ PORT    USER    PASSWORD&lt;br /&gt;
command_line /usr/local/bin/check_snmp_openvz.sh  $HOSTADDRESS$ $ARG1$  $ARG2$  $ARG3$&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define host {&lt;br /&gt;
        host_name   openvz-server&lt;br /&gt;
        alias       Serwer Openvz&lt;br /&gt;
        address     207.46.250.119&lt;br /&gt;
        use         generic-host&lt;br /&gt;
        contact_groups  admins&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define service{&lt;br /&gt;
        use                             generic-service&lt;br /&gt;
        host_name                       openvz-server&lt;br /&gt;
        service_description             Virtual Machines Limits&lt;br /&gt;
        check_command                   check_snmp_openvz_on_port!161!my_username!my_password&lt;br /&gt;
        max_check_attempts              1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nagios plugin ===&lt;br /&gt;
It is shell script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# cat /usr/local/bin/check_snmp_openvz.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
HOST=$1&lt;br /&gt;
PORT=$2&lt;br /&gt;
USER=$3&lt;br /&gt;
PASS=$4&lt;br /&gt;
export FILE=/tmp/$HOST.beancounters&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA_TMP=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.51.4`&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATA=`echo &amp;quot;$DATA_TMP&amp;quot;| perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# if ($ret == 0 ) { print &amp;quot;Ok. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET1=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
#####################################################################################&lt;br /&gt;
######### quota check&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
DATA=`snmpwalk   -v 3  -u $USER -l authPriv   -a MD5 -A $PASS -x DES -X $PASS $HOST:$PORT .1.3.6.1.4.1.2021.52.4 \&lt;br /&gt;
|  perl -ne '/&amp;quot;(.*)&amp;quot;/ ; print &amp;quot;$1\n&amp;quot; ;'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$?&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Unknown snmp error&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                $time=$5 ;&lt;br /&gt;
                $expire=$6 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET2=$?&lt;br /&gt;
&lt;br /&gt;
#####################################################################################&lt;br /&gt;
########### return&lt;br /&gt;
#####################################################################################&lt;br /&gt;
&lt;br /&gt;
if [  $RET1  -gt $RET2  ]; then&lt;br /&gt;
        RET=$RET1&lt;br /&gt;
        else&lt;br /&gt;
        RET=$RET2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [  $RET  = 0  ]; then&lt;br /&gt;
        echo Ok.&lt;br /&gt;
fi&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== check_vzquota Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
RET=0&lt;br /&gt;
DATA=`echo;sudo /usr/sbin/vzlist -1 | xargs -I {} bash -c &amp;quot;echo {}:;sudo /usr/sbin/vzquota stat {}&amp;quot;`&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vid;&lt;br /&gt;
        if ( /^(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; }&lt;br /&gt;
        if ( /\s*(\S+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ){&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $usage=$2 ;&lt;br /&gt;
                $softlimit=$3 ;&lt;br /&gt;
                $hardlimit=$4 ;&lt;br /&gt;
                if ( $usage &amp;gt;= $softlimit ){&lt;br /&gt;
                        print &amp;quot;WARNING: VZquota limit exceeded on $vid: $resource  usage-&amp;gt;$usage, softlimit-&amp;gt;$softlimit, hardlimit-&amp;gt;$hardlimit, time-&amp;gt;$time, expire-&amp;gt;$expire  &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                print &amp;quot;$vid:$resource $usage/$softlimit &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
RET=$?&lt;br /&gt;
echo&lt;br /&gt;
exit $RET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== check_ubc Without SNMP ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export FILE=/tmp/check_ubc&lt;br /&gt;
RET=0&lt;br /&gt;
&lt;br /&gt;
DATA=`cat /proc/user_beancounters`&lt;br /&gt;
&lt;br /&gt;
if [ -f $FILE ]; then&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; | perl  -n -e'&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
my $file=$ENV{&amp;quot;FILE&amp;quot;};&lt;br /&gt;
my $ret=0 ;&lt;br /&gt;
my $vid ;&lt;br /&gt;
my $resource ;&lt;br /&gt;
my $held ;&lt;br /&gt;
my $maxheld ;&lt;br /&gt;
my $barrier ;&lt;br /&gt;
my $limit ;&lt;br /&gt;
my $failcnt ;&lt;br /&gt;
my %beancounters ;&lt;br /&gt;
my %beancounters_old ;&lt;br /&gt;
while(&amp;lt;STDIN&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
                if ( ($held  &amp;gt; $barrier) &amp;amp;&amp;amp; ($barrier != 0) ) {&lt;br /&gt;
                        print &amp;quot;WARNING: Limits on $vid: $resource  held-&amp;gt;$held , barrier-&amp;gt;$barrier ( limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                        $ret=1;&lt;br /&gt;
                }&lt;br /&gt;
                                #print &amp;quot;$vid:$resource $held Barrier:$barrier &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# read and parse old data&lt;br /&gt;
open(MYINPUTFILE, &amp;quot;&amp;lt;$file&amp;quot;);&lt;br /&gt;
while(&amp;lt;MYINPUTFILE&amp;gt;){&lt;br /&gt;
        my %vmachine;&lt;br /&gt;
        if ( /\D*(\d+):.*/ ){ $vid=$1; $beancounters_old{$vid}=\%vmachine ; }&lt;br /&gt;
        if ( /^[\W\d]+([a-z]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+).*/ ) {&lt;br /&gt;
                $resource=$1 ;&lt;br /&gt;
                $held=$2 ;&lt;br /&gt;
                $maxheld=$3 ;&lt;br /&gt;
                $barrier=$4 ;&lt;br /&gt;
                $limit=$5 ;&lt;br /&gt;
                $failcnt=$6 ;&lt;br /&gt;
                ${beancounters_old{$vid}}{$resource}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
foreach my $vmachine_id (keys %beancounters) {&lt;br /&gt;
        foreach my $resource (keys %{$beancounters{$vmachine_id}} ) {&lt;br /&gt;
                if ( defined($beancounters{$vmachine_id}{$resource}[4]) &amp;amp;&amp;amp; defined($beancounters_old{$vmachine_id}{$resource}[4]) ){&lt;br /&gt;
                        my $failcnt=$beancounters{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $failcnt_old=$beancounters_old{$vmachine_id}{$resource}[4];&lt;br /&gt;
                        my $held=$beancounters{$vmachine_id}{$resource}[0];&lt;br /&gt;
                        my $maxheld=$beancounters{$vmachine_id}{$resource}[1];&lt;br /&gt;
                        my $barrier=$beancounters{$vmachine_id}{$resource}[2];&lt;br /&gt;
                        my $limit=$beancounters{$vmachine_id}{$resource}[3];&lt;br /&gt;
                        if ( $failcnt_old &amp;lt; $failcnt ){&lt;br /&gt;
                                print &amp;quot;CRITICAL: Incrased failcnt  $vmachine_id: $resource from $failcnt_old to $failcnt (held-&amp;gt;$held , maxheld-&amp;gt;$maxheld , barrier-&amp;gt;$barrier , limit-&amp;gt;$limit ) &amp;quot; ;&lt;br /&gt;
                                $ret=2;&lt;br /&gt;
                        }&lt;br /&gt;
                                                #print &amp;quot;$vmachine_id: Old_Failcnt: $failcnt_old Failcnt: $failcnt \n&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ($ret == 0 ) { print &amp;quot;OK. \n&amp;quot; ; }&lt;br /&gt;
# print Dumper(%beancounters_old) ;&lt;br /&gt;
# print &amp;quot;\n&amp;quot;;&lt;br /&gt;
exit($ret);&lt;br /&gt;
'&lt;br /&gt;
&lt;br /&gt;
RET=$?&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$DATA&amp;quot; &amp;gt; $FILE&lt;br /&gt;
exit $RET&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Differences_between_venet_and_veth&amp;diff=5910</id>
		<title>Differences between venet and veth</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Differences_between_venet_and_veth&amp;diff=5910"/>
		<updated>2008-05-19T12:27:00Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: some cleaning (link, bold, italic, order, VE=&amp;gt;CT, misspelling)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenVZ provides you to use either  [[veth]] (Virtual eTHernet) or [[venet]] (Virtual NETwork) devices (or both) for in-[[CT]] networking. Here we describe the differences between those devices.&lt;br /&gt;
&lt;br /&gt;
* ''veth'' allows broadcasts in CT, so you can use even a DHCP server inside a CT, or a samba server with domain broadcasts or other such stuff.&lt;br /&gt;
* ''veth'' has some security implications, so is not recommended in untrusted environments like HSP. This is due to broadcasts, traffic sniffing, possible IP collisions etc. i.e. CT's user can actually ruin your ethernet network with such direct access to ethernet layer.&lt;br /&gt;
* With ''veth'' device, only node administrator can assign an IP to a CT. With ''veth'' device, network settings can be fully done on CT side. CT should setup correct gateway, IP/netmask etc. and then a [[HN|node]] admin can only choose where your traffic goes.&lt;br /&gt;
* ''veth'' devices can be bridged together and/or with other devices. For example, in host system admin can bridge ''veth'' from 2 CTs with some VLAN eth0.X. In this case, these 2 CTs will be connected to this VLAN.&lt;br /&gt;
* ''veth'' device is a bit faster and more efficient.&lt;br /&gt;
* With ''veth'' devices, IPv6 auto generates an address from MAC.&lt;br /&gt;
&lt;br /&gt;
The brief summary:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|+ '''Differences between veth and venet'''&lt;br /&gt;
! Feature !! [[veth]] !! [[venet]]&lt;br /&gt;
|-&lt;br /&gt;
! MAC address&lt;br /&gt;
| {{yes}} || {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! Broadcasts inside CT&lt;br /&gt;
| {{yes}} || {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! Traffic sniffing&lt;br /&gt;
| {{yes}} || {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! Network security&lt;br /&gt;
| style=&amp;quot;background: #ffdddd&amp;quot; | Low &amp;lt;ref&amp;gt;Due to broadcasts, sniffing and possible IP collisions etc.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #ddffdd&amp;quot; | High&lt;br /&gt;
|-                         &lt;br /&gt;
! Can be used in bridges&lt;br /&gt;
| {{yes}} || {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! Performance&lt;br /&gt;
| style=&amp;quot;background: #ffdddd&amp;quot; | Fast&lt;br /&gt;
| style=&amp;quot;background: #ddffdd&amp;quot; | Fastest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Networking]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=VEID&amp;diff=5909</id>
		<title>VEID</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=VEID&amp;diff=5909"/>
		<updated>2008-05-19T11:13:07Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: sorry I forget : Category: Definitions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT:[[CTID]]&lt;br /&gt;
[[Category: Definitions]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=CTID&amp;diff=5908</id>
		<title>CTID</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=CTID&amp;diff=5908"/>
		<updated>2008-05-19T11:12:36Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: sorry I forget : Category: Definitions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT:[[container]]&lt;br /&gt;
[[Category: Definitions]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=VEID&amp;diff=5907</id>
		<title>VEID</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=VEID&amp;diff=5907"/>
		<updated>2008-05-19T11:10:36Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: #REDIRECT:CTID&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT:[[CTID]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=CTID&amp;diff=5906</id>
		<title>CTID</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=CTID&amp;diff=5906"/>
		<updated>2008-05-19T11:09:58Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: #REDIRECT:container&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT:[[container]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Container&amp;diff=5905</id>
		<title>Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Container&amp;diff=5905"/>
		<updated>2008-05-19T11:05:31Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: Add a note for CTID&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''container''' (otherwise known as CT, Virtual Environment (VE), Virtual Private Server (VPS) etc.) is one of the main concepts of OpenVZ.&lt;br /&gt;
&lt;br /&gt;
Container is an isolated entity which performs and executes exactly like a stand-alone server. Container can be rebooted independently and have root access, users/groups, IP address(es), memory, processes, files, applications, system libraries and configuration files.&lt;br /&gt;
&lt;br /&gt;
OpenVZ allows to have multiple CTs (up to as many as several hundreds) on a single [[Hardware Node]].&lt;br /&gt;
&lt;br /&gt;
{{Note|in this Wiki, terms ''VE'' and ''container'' are used interchangeably. For new articles, ''container'' is the preferable term.}}&lt;br /&gt;
&lt;br /&gt;
If you want to manage your container, you must use her identifer : a ConTainer's IDentifer (CTID).&amp;lt;br /&amp;gt;&lt;br /&gt;
Please note that a quota ID is not &amp;lt;i&amp;gt;always&amp;lt;/i&amp;gt; the same as a CTID&lt;br /&gt;
&lt;br /&gt;
{{Note|in this Wiki, terms ''VEID'' and ''CTID'' are used interchangeably. For new articles, ''CTID'' is the preferable term.}}&lt;br /&gt;
&amp;lt;!-- I saw the new usage of CTID in last vzmigrate (2000-2008, Parallels)--&amp;gt;&lt;br /&gt;
[[Category: Definitions]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Disk_quota&amp;diff=5904</id>
		<title>Disk quota</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Disk_quota&amp;diff=5904"/>
		<updated>2008-05-19T09:15:48Z</updated>

		<summary type="html">&lt;p&gt;Ginkyo: add command for space available in VE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Basic disk quota management:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To set disk space, run the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  vzctl set CTID --diskspace $SoftLimit$:$HardLimit$ --save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# vzctl set 101 --diskspace 6G:7G --save&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could verify the space available with this command (ie : CTID =101)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[host-node]# vzctl exec 101 df -h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Disk quota]]&lt;/div&gt;</summary>
		<author><name>Ginkyo</name></author>
		
	</entry>
</feed>