# 新建网桥ovs-vsctl add-br br0
# 添加网卡tap1至网桥ovs-vsctl add-port br0 tap1 tag=10 -- set interface tap1 type=internal
ip link show
# 新建namespace ns-tap1ip netns add ns-tap1
# 将tap1网卡放入namespace中ip link set dev tap1 netns ns-tap1
# 查看ns-tap1的网络信息ip netns exec ns-tap1 ip link show
# 启动ns-tap1网络空间中的网卡lo和tap1ip netns exec ns-tap1 ip link set dev lo up
ip netns exec ns-tap1 ip link set dev tap1 up
# 将tap1的ip地址设为10.0.0.2/24ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.2/24
# 设置默认路由经过10.0.0.1ip netns exec ns-tap1 ip route add default via 10.0.0.1
# 查看ns-tap1中的ip和路由信息ip netns exec ns-tap1 ip addr show
ip netns exec ns-tap1 ip route show
创建tag为11的内网2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 添加网卡tap2至网桥ovs-vsctl add-port br0 tap2 tag=11 -- set interface tap2 type=internal
# 新建namespace ns-tap2ip netns add ns-tap2
# 将tap1网卡放入namespace中ip link set dev tap2 netns ns-tap2
# 启动ns-tap2网络空间中的网卡lo和tap2ip netns exec ns-tap2 ip link set dev lo up
ip netns exec ns-tap2 ip link set dev tap2 up
# 将tap2的ip地址设为10.0.1.2/24ip netns exec ns-tap2 ip addr add dev tap2 10.0.1.2/24
# 设置默认路由经过10.0.1.1ip netns exec ns-tap2 ip route add default via 10.0.1.1
# 查看ns-tap2中的ip和路由信息ip netns exec ns-tap2 ip addr show
ip netns exec ns-tap2 ip route show
最终查看ns-tap2中的ip和路由信息如下
查看网桥br0此时的信息
测试两个内网的连通性,在ns-tap1中ping ns-tap2
可见网络不连通使用netns模拟器由器实现内网1与内网2互通
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 给br0网桥增加r1和r2网卡ovs-vsctl add-port br0 r1 tag=10 -- set interface r1 type=internal
ovs-vsctl add-port br0 r2 tag=11 -- set interface r2 type=internal
# 新建一个网络空间routerip netns add router
# 将网卡r1 r2放入routerip link set dev r1 netns router
ip link set dev r2 netns router
# 启动router中的所有网卡ip netns exec router ip link set dev lo up
ip netns exec router ip link set dev r1 up
ip netns exec router ip link set dev r2 up
# 给router中的网卡配置ip地址使其在同一个网段下ip netns exec router ip addr add dev r1 10.0.0.1/24
ip netns exec router ip addr add dev r2 10.0.1.1/24
# 测试连通性ip netns exec router ping -c 1 10.0.0.2
ip netns exec router ping -c 1 10.0.1.2
ip netns exec ns-tap1 ping -c 1 10.0.1.2
测试结果如下
可见内网此时已经互通
任务五
配置router中的数据包从r2网卡中离开网络并进行智能ip伪装
1
ip netns exec router iptables -t nat -A POSTROUTING -o r2 -j MASQUERADE
在ns-tap1网络中ping ns-tap2网络,查看router中的防火墙匹配到的数据包
打开两个终端利用tcpdump进行抓包分析。用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤。实验过程中我们使用-nei参数表示显示数据包的主机ip地址,将链路层信息显示出来,并指定监听的接口。
# 添加网桥br0ovs-vsctl add-br br0
# 添加虚拟网卡qvo-tap1 并设置tunnel另一端网卡为qvb-tap1ip link add qvo-tap1 type veth peer name qvb-tap1
# 启动qvo-tap1和qvb-tap1网卡ip link set qvb-tap1 up
ip link set qvo-tap1 up
# 使用brctl来配置网桥,addbr添加网桥qbr-tap1brctl addbr qbr-tap1
# 启动网桥qbr-tap1ip link set qbr-tap1 up
# 将qvb-tap1网卡添加至网桥qbr-tap1brctl addif qbr-tap1 qvb-tap1
# 将qvo-tap1 tag设置为10且添加到br0网桥中ovs-vsctl add-port br0 qvo-tap1 tag=10# 新建虚拟网卡tap1,相当于用户主机的网卡ip link add tap1 type veth peer name tap11
# 将tap11添加到qbr-tap1网桥中brctl addif qbr-tap1 tap11
# 启动tap11网卡ip link set tap11 up
# 添加网络空间ns-tap1,作为内网1ip netns add ns-tap1
# 将tap1网卡添加到ns-tap1空间中ip link set dev tap1 netns ns-tap1
# 启动ns-tap1中的网卡ip netns exec ns-tap1 ip link set dev lo up
ip netns exec ns-tap1 ip link set dev tap1 up
# 为tap1配置ip地址为10.0.0.2/24ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.2/24
# 删掉之前tap1网卡对应的ipip netns exec ns-tap1 ip addr del dev tap1 10.0.0.2/24
# 重新给网卡配置ipip netns exec ns-tap1 ip addr add dev tap1 10.0.0.4/24
可见已经不能ping通且iptables匹配到了应该丢弃的数据包
1
2
3
4
# 删掉修改的ip重新设置为之前的ip,修改网卡的MAC地址ip netns exec ns-tap1 ip addr del dev tap1 10.0.0.4/24
ip netns exec ns-tap1 ip addr add dev tap1 10.0.0.2/24
ip netns exec ns-tap1 ip link set dev tap1 address 16:f7:55:f5:d7:ac