同主机跨网段通信
使用namespace完成
创建两个namespace
ip netns add ns1
ip netns add ns2
创建两对 veth-pair,一端分别挂在两个 namespace 中:
ip link add v1 type veth peer name v1_r
ip link add v2 type veth peer name v2_r
ip link set v1 netns ns1
ip link set v2 netns ns2
分别给两对 veth-pair 端点配上 IP 并启用:
ip a a 10.10.10.1/24 dev v1_r
ip l s v1_r up
ip a a 10.10.20.1/24 dev v2_r
ip l s v2_r up
ip netns exec ns1 ip a a 10.10.10.2/24 dev v1
ip netns exec ns1 ip l s v1 up
ip netns exec ns2 ip a a 10.10.20.2/24 dev v2
ip netns exec ns2 ip l s v2 up
ping失败,开启ipv4转发依旧失败
查看ns1路由表信息
只有一条直连路由,没有去往 10.10.20.0/24
网段的路由,配置路由。
sudo ip netns exec ns1 route add -net 10.10.20.0 netmask 255.255.255.0 gw 10.10.10.1
重新查看路由表,添加成功
再次ping
没有配置ns2 去往10.10.10.0/24网段的路由
sudo ip netns exec ns2 ip route add 10.10.10.0/24 via 10.10.20.1
在 FORWARD 链的最顶部插入规则,允许从 10.10.10.0/24
到 10.10.20.0/24
和反向的流量。
sudo iptables -I FORWARD 1 -s 10.10.10.0/24 -d 10.10.20.0/24 -j ACCEPT
sudo iptables -I FORWARD 1 -s 10.10.20.0/24 -d 10.10.10.0/24 -j ACCEPT
重新ping,测试
使用Libpcap捕获用户级别的网络数据包
跨网段数据包发送过程:
将lo接口在ns1命名空间中启用,并在命名空间ns1中启动一个python3内置的HTTP服务器,该服务器监听端口为8080,并接受来自任务网络接口的请求。
sudo ip netns exec ns1 ip addr show lo
sudo ip netns exec ns1 ip link set lo up
sudo ip netns exec ns1 python3 -m http.server 8080 --bind 0.0.0.0
在ns2访问HTTP服务器
sudo ip netns exec ns2 curl http://10.10.10.2:8080