====== Testing graphpath, the ASCII network diagram tool ======
This lab show an jail/vnet based diagram used for testing BSDRP's [[https://github.com/ocochard/graphpath|graphpath]].
===== Presentation =====
[[https://github.com/ocochard/graphpath|graphpath]] generates an ASCII network diagram of the path, view from the host, from a source toward a destination IP address.
For testing this tools, we need to create a network with a topology allowing all graphpath use cases.
==== Network diagram ====
{{:documentation:examples:graphpath.png|}}
===== Setting-up the lab =====
==== Downloading BSD Router Project images ====
Download BSDRP serial image (prevent to have to use an X display) on Sourceforge.
==== Download Lab scripts =====
More information on these BSDRP lab scripts available on [[documentation:examples:How to build a BSDRP router lab]].
Start the lab with only one router, example with bhyve under FreeBSD:
user:~ # tools/BSDRP-lab-bhyve.sh -i /usr/obj/BSDRPstable.amd64/BSDRP-1.801-full-amd64-serial.img.xz
BSD Router Project (http://bsdrp.net) - bhyve full-meshed lab script
Setting-up a virtual lab with 1 VM(s):
- Working directory: /tmp/BSDRP
- Each VM has 1 core(s) and 512M RAM
- Emulated NIC: virtio-net
- Switch mode: bridge + tap
- 1 LAN(s) between all VM
- Full mesh Ethernet links between each VM
VM 1 have the following NIC:
- vtnet0 connected to LAN number 1
For connecting to VM'serial console, you can use:
- VM 1 : cu -l /dev/nmdm1B
===== Network setup =====
From BSDRP, you can configure all these with only one command line:
labconfig graphpath
==== Host (me) ====
sysrc hostname="me"
sysrc cloned_interfaces="bridge1 bridge2 bridge11 bridge12 bridge21"
sysrc ifconfig_bridge1="inet 10.0.1.1/24"
sysrc ifconfig_bridge1_ipv6="inet6 2001:db8:1::1 prefixlen 64"
sysrc ifconfig_bridge2="inet 10.0.2.1/24"
sysrc ifconfig_bridge2_ipv6="inet6 2001:db8:2::1 prefixlen 64"
sysrc ifconfig_bridge11="up"
sysrc ifconfig_bridge12="up"
sysrc ifconfig_bridge21="up"
sysrc static_routes="host11 host12 host21"
sysrc route_host11="-net 10.0.11.0/24 10.0.1.11"
sysrc route_host12="-net 10.0.12.0/24 10.0.1.12"
sysrc route_host21="-net 10.0.21.0/24 10.0.2.21"
sysrc ipv6_static_routes="host11 host12 host21"
sysrc ipv6_route_host11="2001:db8:11:: -prefixlen 64 2001:db8:1::11"
sysrc ipv6_route_host12="2001:db8:12:: -prefixlen 64 2001:db8:1::12"
sysrc ipv6_route_host21="2001:db8:21:: -prefixlen 64 2001:db8:2::21"
hostname me
service netif restart
service routing restart
==== Jail host11 ====
host11 is configured as a simple host:
tenant -c -j host11 -i bridge11
cat > /etc/jails/host11/rc.conf <
==== Jail host12 ====
host12 is configured as a simple host:
tenant -c -j host12 -i bridge12
cat > /etc/jails/host12/rc.conf <
==== Jail router11 ====
router11 is configured as a router:
tenant -c -j router11 -i bridge1,bridge11
cat > /etc/jails/router11/rc.conf <
==== Jail router12 ====
router12 is configured as a router:
tenant -c -j router12 -i bridge1,bridge12
cat > /etc/jails/router12/rc.conf <
==== Jail router21 ====
router21 is configured as a router:
tenant -c -j router21 -i bridge2,bridge21
cat > /etc/jails/router21/rc.conf <
==== Jail host21 ====
host21 is configured as a simple host:
tenant -c -j host21 -i bridge21
cat > /etc/jails/host21/rc.conf <
==== Start the jails ====
[root@me]~# service jail start
Starting jails:epair111a: Ethernet address: 02:ff:c0:00:09:0a
epair111b: Ethernet address: 02:00:90:00:0a:0b
epair212a: Ethernet address: 02:ff:c0:00:0b:0a
epair212b: Ethernet address: 02:00:90:00:0c:0b
epair31a: Ethernet address: 02:ff:c0:00:0a:0a
epair31b: Ethernet address: 02:00:90:00:0d:0b
epair41a: Ethernet address: 02:ff:c0:00:0c:0a
epair41b: Ethernet address: 02:00:90:00:0e:0b
epair311a: Ethernet address: 02:ff:c0:00:0f:0a
epair311b: Ethernet address: 02:00:90:00:10:0b
epair52a: Ethernet address: 02:ff:c0:00:11:0a
epair52b: Ethernet address: 02:00:90:00:12:0b
epair412a: Ethernet address: 02:ff:c0:00:13:0a
epair412b: Ethernet address: 02:00:90:00:14:0b
epair621a: Ethernet address: 02:ff:c0:00:0d:0a
epair621b: Ethernet address: 02:00:90:00:10:0b
epair521a: Ethernet address: 02:ff:c0:00:15:0a
epair521b: Ethernet address: 02:00:90:00:16:0b
host11 host12 host21 router21 router11 router12.
And test host11 can reach host21:
[root@me]~# jexec host11 traceroute 10.0.21.21
traceroute to 10.0.21.21 (10.0.21.21), 64 hops max, 40 byte packets
1 10.0.11.254 (10.0.11.254) 0.055 ms 0.051 ms 0.039 ms
2 10.0.1.1 (10.0.1.1) 0.043 ms 0.048 ms 0.041 ms
3 10.0.2.21 (10.0.2.21) 0.044 ms 0.056 ms 0.043 ms
4 10.0.21.21 (10.0.21.21) 0.047 ms 0.052 ms 0.045 ms
[root@me]~# jexec host11 traceroute6 2001:db8:21::21
traceroute6 to 2001:db8:21::21 (2001:db8:21::21) from 2001:db8:11::11, 64 hops max, 20 byte packets
1 2001:db8:11::254 0.127 ms 0.103 ms 0.091 ms
2 2001:db8:1::1 0.101 ms 0.106 ms 0.094 ms
3 2001:db8:2::21 0.139 ms 0.108 ms 0.098 ms
4 2001:db8:21::21 0.159 ms 0.112 ms 0.102 ms
===== Testing graphpath =====
Now, from the main host, we should be able to generate some ASCII network diagrams:
==== Inet4 ====
[root@me]~# ping -c 1 10.0.11.11
[root@me]~# ping -c 1 10.0.12.12
[root@me]~# ping -c 1 10.0.21.21
[root@me]~# graphpath 10.0.11.11 10.0.12.12
+-----------------------------+ +-----------------------------+
| SOURCE HOST | | DESTINATION HOST |
| IP: 10.0.11.11 | | IP: 10.0.12.12 |
+-----------------------------+ +-----------------------------+
| |
+-----------------------------+ +-----------------------------+
| ROUTER TOWARDS SOURCE | | ROUTER TOWARDS DESTINATION |
| IP: 10.0.1.11 | | IP: 10.0.1.12 |
| ARP: 02:01:6c:01:b0:03 | | ARP: 02:01:6c:01:b0:04 |
+-----------------------------+ +-----------------------------+
| |
--+---+------------------------+---
|
+-----------------------------+
| IF: bridge1 |
| MAC: 02:e7:49:ed:fc:01 |
| IP: 10.0.1.1 |
| net: 10.0.11.0 |
| mask: 255.255.255.0 |
| |
| THIS ROUTER |
+-----------------------------+
[root@me]~# graphpath 10.0.11.11 10.0.21.21
+-----------------------------+
| SOURCE HOST |
| IP: 10.0.11.11 |
+-----------------------------+
|
+-----------------------------+
| ROUTER TOWARDS SOURCE |
| IP: 10.0.1.11 |
| ARP: 02:01:6c:01:b0:03 |
+-----------------------------+
|
+-----------------------------+
| IF: bridge1 |
| MAC: 02:e7:49:ed:fc:01 |
| IP: 10.0.1.1 |
| net: 10.0.11.0 |
| mask: 255.255.255.0 |
| |
| THIS ROUTER |
| |
| net: 10.0.21.0 |
| mask: 255.255.255.0 |
| IP: 10.0.2.1 |
| MAC: 02:e7:49:ed:fc:02 |
| IF: bridge2 |
+-----------------------------+
|
+-----------------------------+
| ROUTER TOWARDS DESTINATION |
| IP: 10.0.2.21 |
| ARP: 02:02:6c:01:b0:05 |
+-----------------------------+
|
+-----------------------------+
| DESTINATION HOST |
| IP: 10.0.21.21 |
+-----------------------------+
[root@me]~# graphpath 10.0.11.11 10.0.1.12
+-----------------------------+ +-----------------------------+
| SOURCE HOST | | DESTINATION HOST |
| IP: 10.0.11.11 | | IP: 10.0.1.12 |
| | | ARP: 02:01:6c:01:b0:04 |
+-----------------------------+ +-----------------------------+
| |
+-----------------------------+ |
| ROUTER TOWARDS SOURCE | |
| IP: 10.0.1.11 | |
| ARP: 02:01:6c:01:b0:03 | |
+-----------------------------+ |
| |
--+---+------------------------+---
|
+-----------------------------+
| IF: bridge1 |
| MAC: 02:e7:49:ed:fc:01 |
| IP: 10.0.1.1 |
| net: 10.0.11.0 |
| mask: 255.255.255.0 |
| |
| THIS ROUTER |
+-----------------------------+
[root@me]~# graphpath 10.0.1.12 10.0.11.11
+-----------------------------+ +-----------------------------+
| SOURCE HOST | | DESTINATION HOST |
| IP: 10.0.1.12 | | IP: 10.0.11.11 |
| ARP: 02:01:c9:01:b0:04 | | |
+-----------------------------+ +-----------------------------+
| |
| +-----------------------------+
| | ROUTER TOWARDS DESTINATION |
| | IP: 10.0.1.11 |
| | ARP: 02:01:c9:01:b0:03 |
| +-----------------------------+
| |
--+---+------------------------+---
|
+-----------------------------+
| IF: bridge1 |
| MAC: 02:de:f2:41:54:01 |
| IP: 10.0.1.1 |
| net: 10.0.1.0 |
| mask: 255.255.255.0 |
| |
| THIS ROUTER |
+-----------------------------+
==== Inet6 ====
[root@me]~# ping6 -c 1 2001:db8:11::11
[root@me]~# ping6 -c 1 2001:db8:12::12
[root@me]~# ping6 -c 1 2001:db8:21::21
[root@me]~# graphpath 2001:db8:11::11 2001:db8:12::12
+---------------------------------------------------+ +---------------------------------------------------+
| SOURCE HOST | | DESTINATION HOST |
| IP: 2001:db8:11::11 | | IP: 2001:db8:12::12 |
+---------------------------------------------------+ +---------------------------------------------------+
| |
+---------------------------------------------------+ +---------------------------------------------------+
| ROUTER TOWARDS SOURCE | | ROUTER TOWARDS DESTINATION |
| IP: 2001:db8:1::11 | | IP: 2001:db8:1::12 |
| NDP: 02:01:c9:01:b0:03 | | NDP: 02:01:c9:01:b0:04 |
+---------------------------------------------------+ +---------------------------------------------------+
| |
--+---+----------------------------------------------+---
|
+---------------------------------------------------+
| IF: bridge1 |
| MAC: 02:de:f2:41:54:01 |
| IP: 2001:db8:1::1 |
| net: 2001:db8:11:: |
| mask: ffff:ffff:ffff:ffff:: |
| |
| THIS ROUTER |
+---------------------------------------------------+
[root@me]~# graphpath 2001:db8:11::11 2001:db8:21::21
+---------------------------------------------------+
| SOURCE HOST |
| IP: 2001:db8:11::11 |
+---------------------------------------------------+
|
+---------------------------------------------------+
| ROUTER TOWARDS SOURCE |
| IP: 2001:db8:1::11 |
| NDP: 02:01:c9:01:b0:03 |
+---------------------------------------------------+
|
+---------------------------------------------------+
| IF: bridge1 |
| MAC: 02:de:f2:41:54:01 |
| IP: 2001:db8:1::1 |
| net: 2001:db8:11:: |
| mask: ffff:ffff:ffff:ffff:: |
| |
| THIS ROUTER |
| |
| net: 2001:db8:21:: |
| mask: ffff:ffff:ffff:ffff:: |
| IP: 2001:db8:2::1 |
| MAC: 02:de:f2:41:54:02 |
| IF: bridge2 |
+---------------------------------------------------+
|
+---------------------------------------------------+
| ROUTER TOWARDS DESTINATION |
| IP: 2001:db8:2::21 |
| NDP: 02:02:c9:01:b0:05 |
+---------------------------------------------------+
[root@me]~# graphpath 2001:db8:11::11 2001:db8:1::12
+---------------------------------------------------+ +---------------------------------------------------+
| SOURCE HOST | | DESTINATION HOST |
| IP: 2001:db8:11::11 | | IP: 2001:db8:1::12 |
| | | NDP: 02:01:c9:01:b0:04 |
+---------------------------------------------------+ +---------------------------------------------------+
| |
+---------------------------------------------------+ |
| ROUTER TOWARDS SOURCE | |
| IP: 2001:db8:1::11 | |
| NDP: 02:01:c9:01:b0:03 | |
+---------------------------------------------------+ |
| |
--+---+----------------------------------------------+---
|
+---------------------------------------------------+
| IF: bridge1 |
| MAC: 02:de:f2:41:54:01 |
| IP: 2001:db8:1::1 |
| net: 2001:db8:11:: |
| mask: ffff:ffff:ffff:ffff:: |
| |
| THIS ROUTER |
+---------------------------------------------------+
[root@me]~# graphpath 2001:db8:1::12 2001:db8:11::11
+---------------------------------------------------+ +---------------------------------------------------+
| SOURCE HOST | | DESTINATION HOST |
| IP: 2001:db8:1::12 | | IP: 2001:db8:11::11 |
| NDP: 02:01:c9:01:b0:04 | | |
+---------------------------------------------------+ +---------------------------------------------------+
| |
| +---------------------------------------------------+
| | ROUTER TOWARDS DESTINATION |
| | IP: 2001:db8:1::11 |
| | NDP: 02:01:c9:01:b0:03 |
| +---------------------------------------------------+
| |
--+---+----------------------------------------------+---
|
+---------------------------------------------------+
| IF: bridge1 |
| MAC: 02:de:f2:41:54:01 |
| IP: 2001:db8:1::1 |
| net: 2001:db8:1:: |
| mask: ffff:ffff:ffff:ffff:: |
| |
| THIS ROUTER |
+---------------------------------------------------+