在vpp中做nat实验
????????最近在熟悉 vpp 的各項功能,擺在眼前的第一個就是 nat,網上相關的資料還比較少。下面就整理一下目前所學到的,在 vpp 中進行 nat 實驗的基本流程,還不完善,可能有理解上的錯誤,歡迎指正。
????????首先給出該 nat 實驗的網絡拓撲連接,下面的步驟稍微有點多,但目的是為了搭建這樣的拓撲圖。
基本流程:
1)在 host 中創建一對 veth 設備 vpp1outside 和 vpp1outsidehost
2)在 host 中給 vpp1outsidehost 設置 IP
$ ip addr add 10.10.1.1/24 dev vpp1outsidehost $ ifconfig vpp1outsidehost up3)在 host 中創建另外一對 veth 設備 vpp1inside 和 vpp1insidehost
$ ip link add name vpp1inside type veth peer name vpp1insidehost4)在 host 中給?vpp1insidehost 配置 IP
$ ip addr add 10.10.2.1/24 dev vpp1insidehost5) 在 host 中創建 netns
$ ip netns add inside6) 將 vpp1insidehost 加入 netns
$ ip link set dev vpp1insidehost up netns inside7) 在 netns 中給 vpp1insidehost 設置 IP
$ ip netns exec inside ip addr add 10.10.2.1/24 dev vpp1insidehost8) 在 netns 中設置路由
$ ip netns exec inside ip route add 10.10.1.0/24 via 10.10.2.29) 在 vpp 中創建連接到 vpp1outside 的接口
vpp# create host-interface name vpp1outside10) 在 vpp 中給 vpp1outside 設置 IP
vpp# set int ip address host-vpp1outside 10.10.1.2/24 vpp# set int state host-vpp1outside up11) 在 vpp 中創建連接到 vpp1inside 的接口
vpp# create host-interface name vpp1inside12)?在 vpp 中給 vpp1inside 設置 IP
vpp# set int ip address host-vpp1inside 10.10.2.2/24 vpp# set int state host-vpp1inside up13) 在 vpp 中配置 nat 接口
vpp# nat44 add interface address host-vpp1outside vpp# set interface nat44 in host-vpp1inside out host-vpp1outside14) 在 host 中對 vpp1outsidehost 抓包
$ tcpdump -s 0 -i vpp1outsidehost -vv15) 在 netns 中 ping host IP
$ ip netns exec inside ping -c 1 10.10.1.1
運行效果:
1)在 netns 中 ping 10.10.1.1
2)在 host 中對 vpp1outsidehost 抓包
$ tcpdump -s 0 -i vpp1outsidehost -vv dropped privs to tcpdump tcpdump: listening on vpp1outsidehost, link-type EN10MB (Ethernet), capture size 262144 bytes 15:19:48.964020 IP (tos 0x0, ttl 63, id 12594, offset 0, flags [DF], proto ICMP (1), length 84) 10.10.1.2 > bogon: ICMP echo request, id 53336, seq 1, length 64 15:19:48.964194 IP (tos 0x0, ttl 64, id 59361, offset 0, flags [none], proto ICMP (1), length 84) bogon > 10.10.1.2: ICMP echo reply, id 53336, seq 1, length 64? ? ? ? 可以看到,在 netns 中 ping 10.10.1.1 時,目標網口 vpp1outsidehost 收到的數據包的源 IP 是 vpp 中 host-vpp1outside 網口的 IP(10.10.1.2),而不是 netns 中 vpp1insidehost 的 IP (10.10.2.1)
參考資料:
1、VPP/Progressive VPP Tutorial - fd.io
2、VPP/NAT - fd.io
總結
以上是生活随笔為你收集整理的在vpp中做nat实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读取硬盘序列号
- 下一篇: 飞机订票系统(c语言)