简介

iproute2 工具包提供了一系列功能强大的命令行工具,例如 ip , 可以用来配置 FOU 隧道。

FOU 隧道可以将 IP packet 封装在 UDP datagram 中进行传输,以此使得用户能够轻松搭建起一个建立在现有 overlay 网络上的虚拟网络。位于传输层的 UDP 协议,具备强大的转发能力,封装在 IP packet 内的 UDP payload 可以跨越网络发送(IP 是网络互联的协议),而 UDP packet 具备端口号,使得它在必要时可以跨越 NAT Gateway。

总之,选择 UDP 作为 underlying 协议,主要是因为它具备高层协议具备的强穿透力(能够跨越网络和 NAT 网关),以及它本身的轻量性(UDP header 只有 8 个字节的长度)。

步骤

加载 fou 内核模块:

sudo modprobe fou

设立 fou 隧道的 UDP 监听端口(注:这两个 UDP 端口号不一定需要相同):

sudo ip -n my-ns1 fou add port 10450 gue
sudo ip -n my-ns2 fou add port 10450 gue

设立 fou 隧道端点的虚拟网卡:

sudo ip -n my-ns1 link add my-fou1 type gre remote 192.168.1.102 local 192.168.1.101 encap gue encap-dport 10450
sudo ip -n my-ns2 link add my-fou1 type gre remote 192.168.1.101 local 192.168.1.102 encap gue encap-dport 10450

启用网卡:

sudo ip -n my-ns1 link set my-fou1 up
sudo ip -n my-ns2 link set my-fou1 up

设定 IP 地址:

sudo ip -n my-ns1 addr add 10.1.1.1/24 dev my-fou1
sudo ip -n my-ns2 addr add 10.1.1.2/24 dev my-fou1

启用 ICMP 广播回复:

sudo ip netns exec my-ns1 sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=0
sudo ip netns exec my-ns2 sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=0

互相 ping 对方:

sudo ip netns exec my-ns1 ping -b -4 -I my-fou1 224.0.0.1
sudo ip netns exec my-ns2 ping -b -4 -I my-fou1 224.0.0.1