为了使veth工作,必须将隧道的一端与另一接口桥接。由于要保持所有虚拟状态,可以在名为brm的网桥中,将tap型虚拟接口与隧道的vm1端(隧道的另一端)连接在一起。现在,您将IP地址提供给brm和vm2(分别为10.0.0.1和10.0.0.2),通过以下方式启用IPv4转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
打开所有接口,并添加一条路由,指示内核如何到达IP地址10.0.0.0/24。就这样。
如果要创建更多对,请对不同的子网重复以下步骤,例如10.0.1.0/24、10.0.2.0/24,依此类推。由于您启用了IPv4转发并将适当的路由添加到内核路由表,因此它们将能够立即相互通信。
另外,请记住,您正在使用的大多数命令(brctl,ifconfig等)都已过时:iproute2套件具有执行所有这些操作的命令,请参见下面我对ip命令的使用。
这是使用veth类型的接口的正确命令序列:
首先创建所有必需的接口,
ip link add dev vm1 type veth peer name vm2
ip link set dev vm1 up
ip tuntap add tapm mode tap
ip link set dev tapm up
ip link add brm type bridge
注意,我们没有启动brm和vm2,因为我们必须为其分配IP地址,但是确实启动了tapm和vm1,这是将它们包括在网桥brm中所必需的。现在将接口tapm和vm1奴役到桥brm,
ip link set tapm master brm
ip link set vm1 master brm
现在将地址提供给网桥和其余的veth接口vm2,
ip addr add 10.0.0.1/24 dev brm
ip addr add 10.0.0.2/24 dev vm2
现在启动vm2和brm,
ip link set brm up
ip link set vm2 up
无需将路由显式添加到子网10.0.0.0/24,它是自动生成的,您可以使用ip route show进行检查。这导致
ping -c1 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.035 m
--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.035/0.035/0.035/0.000 ms
您也可以向后执行此操作,即从vm2返回至brm:
ping -I 10.0.0.2 -c1 10.0.0.1
PING 10.0.0.1 (10.0.0.1) from 10.0.0.2 : 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms
--- 10.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.045/0.045/0.045/0.000 ms
第十种网卡最有用的应用是网络名称空间,它是Linux容器(LXC)中使用的名称空间。您可以如下启动一个名为nnsm的程序
ip netns add nnsm
然后我们将vm2转移到它,
ip link set vm2 netns nnsm
我们为新的网络名称空间赋予lo接口(绝对必要),
ip netns exec nnsm ip link set dev lo up
我们允许在主机上进行NATing,
iptables -t nat -A POSTROUTING -o brm -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(如果您是通过eth0连接到Internet的,否则进行相应的更改),请在新的网络名称空间中启动Shell,
ip netns exec nnsm xterm &
现在,如果您开始输入新的xterm,则会发现您位于IP地址为10.0.0.2的单独虚拟机中,但可以访问Internet。这样做的好处是,新的网络名称空间具有自己的堆栈,例如,这意味着您可以在其中启动VPN,而其他PC 不在 VPN上。这是LXC的基础。
编辑:
我犯了一个错误,将vm2接口关闭并清除其地址。因此,您需要从xterm中添加以下命令:
ip addr add 10.0.0.2/24 dev vm2
ip link set dev vm2 up
ip route add default via 10.0.0.1
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf
现在您可以在xterm中导航。
这些ip
命令也可以在xterm之前使用
ip -netns nnsm addr add 10.0.0.2/24 dev vm2
ip -netns nnsm link set dev vm2 up
ip -netns nnsm route add default via 10.0.0.1
br0
自己吗?