# ip link add net-in type veth peer name net-out
# ifconfig net-in up
# ifconfig net-out up
将net-in添加到openvswitch
# ovs-vsctl add-port br-in net-in
# ovs-vsctl show
e43bbb36-5e1f-4178-8dbc-a87bf11332ed
Bridge br-in
Port br-in
Interface br-in
type: internal
Port net-in
Interface net-in
Port "vx0"
Interface "vx0"
type: vxlan
options: {remote_ip="192.168.190.128"}
ovs_version: "2.5.0"
将net-out添加到ns1中
# ip link set dev net-out name eth0 netns ns1
该网卡现在连接到了openvswitch上,配置和vm1中通网段的ip地址。
登录上vm1主机
# ifconfig lo up
# ifconfig eth0 10.0.0.2 netmask 255.255.255.0 up
在主机2上配置:
# ip netns exec ns1 ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
# ip netns exec ns1 ping 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=16.2 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=1.77 ms
现在主机1中的虚拟机vm1和netns虚拟网络空间是互通了。
# ip link add net1-in type veth peer name net1-out
# ifconfig net1-in up
# ifconfig net1-out up
将net1-in 添加到netns中
# ip link set dev net1-in name eth1 netns ns1
将net1-out 添加到br-out中
# brctl addif br-out net1-out
因为这里是和第二张物理网卡连接的,这张网卡直接对外网,所以netns 的第二张网卡需要配置主机同网段内地址。
# ip netns exec ns1 ifconfig eth1 192.168.1.130 netmask 255.255.255.0 up
为主机1中的vm1配置路由地址:
# ip route add default via 10.0.0.1
# ping 192.168.1.130
PING 192.168.1.130 (192.168.1.130): 56 data bytes
64 bytes from 192.168.1.130: seq=0 ttl=64 time=18.684 ms
64 bytes from 192.168.1.130: seq=1 ttl=64 time=1.212 ms
这样,就说明vm1已经达到netns中的第二张对外的网卡上。
为netns配置路由地址并添加源地址转发:
# ip netns exec ns1 ip route add default via 192.168.1.1
# ip netns exec ns1 iptables -t nat -A POSTROUTING -s 10.0.0.2/32 -j SNAT --to-source 192.168.1.130
# ip netns exec ns1 iptables -t nat -A PREROUTING -d 192.168.130/32 -j DNAT --to-destination 10.0.0.1
从vm1中ping公网地址:
# ping qq.com
PING qq.com (101.226.103.106): 56 data bytes
64 bytes from 101.226.103.106: seq=0 ttl=50 time=48.198 ms
64 bytes from 101.226.103.106: seq=1 ttl=50 time=49.612 ms
这样我们就实现了内网主机中的虚拟主机访问外网。