Last active
June 24, 2020 10:00
-
-
Save zimmcl/66db05182e47bdbf4f3aaad8cf2052c9 to your computer and use it in GitHub Desktop.
IPv4 NETWORK TOPOLOGY IN LINUX NAMESPACES
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
EXIT_OK=0 | |
ARG=$1 | |
autor() | |
{ | |
echo -e "\n\e[1m\e[34m === IPv4 NETWORK TOPOLOGY IN LINUX NAMESPACES ===\e[22m\e[24m\e[39m\n" | |
echo -e " Original Author: \e[1mTOMATTIS Natasha\e[22m\e[24m." | |
echo -e " https://gist.github.com/natitomattis/be26889063203c0b33b33fa25c75a5b6" | |
echo -e " Editing By: \e[1mZIMMEL Ezequiel\e[22m\e[24m." | |
echo -e " https://gist.github.com/zimmcl/66db05182e47bdbf4f3aaad8cf2052c9" | |
} | |
#Show options | |
show_options() | |
{ | |
echo -e "\n Opciones:" | |
echo -e " -h List of options" | |
echo -e " -c Network topology configuration" | |
echo -e " -r Clean set up environment" | |
} | |
# Create resources | |
create_resources() | |
{ | |
echo -e "\e[1m\e[32mCreating network namespace resources\e[22m\e[24m\e[39m" | |
ip netns add h1 | |
ip netns add h2 | |
ip netns add h3 | |
ip netns add r1 | |
ip netns add dhcp_server | |
ip netns ls | |
echo -e "\e[1m\e[32mCreating virtual ethernet interfaces\e[22m\e[24m\e[39m" | |
ip link add name veth1 type veth peer name vpeer1 | |
ip link add name veth2 type veth peer name vpeer2 | |
ip link add name veth3 type veth peer name vpeer3 | |
ip link add name veth-router type veth peer name vpeer-router | |
ip link add name veth-dhcp type veth peer name vpeer-dhcp | |
ip link show | grep -E 'veth|vpeer' | |
echo -e "\e[1m\e[32mAdding new bridge\e[22m\e[24m\e[39m" | |
brctl addbr sw1 | |
brctl show | grep sw1 | |
} | |
# Set peer link up | |
set_peer_link_up() | |
{ | |
echo -e "\e[1m\e[32mUp Virtual ethernet interface\e[22m\e[24m\e[39m" | |
ip link set veth1 up | |
ip link set veth2 up | |
ip link set veth3 up | |
ip link set veth-router up | |
ip link set veth-dhcp up | |
ip link set sw1 up | |
ip link show | grep -E 'veth' | |
} | |
# Assign interfaces to namespaces | |
assign_iface_NS() | |
{ | |
echo -e "\e[1m\e[32mAssigning interfaces to namespaces\e[22m\e[24m\e[39m" | |
ip link set dev vpeer1 netns h1 | |
ip link set dev vpeer2 netns h2 | |
ip link set dev vpeer3 netns h3 | |
ip link set dev vpeer-dhcp netns dhcp_server | |
ip link set dev vpeer-router netns r1 | |
ip link set dev veth1 netns r1 | |
ip link show | grep -E 'vpeer|veth' | |
} | |
# Connect veth to bridge | |
connect_to_bridge() | |
{ | |
echo -e "\e[1m\e[32mConnecting veth to bridge\e[22m\e[24m\e[39m" | |
brctl addif sw1 veth2 | |
brctl addif sw1 veth3 | |
brctl addif sw1 veth-router | |
brctl addif sw1 veth-dhcp | |
brctl show | |
} | |
# Configure router as router | |
conf_router() | |
{ | |
echo -e "\e[1m\e[32mEnabling IPv4 forwarding\e[22m\e[24m\e[39m" | |
ip netns exec r1 sysctl -w net.ipv4.conf.all.forwarding=1 | |
} | |
# Configure IP addresses | |
conf_ip_addr() | |
{ | |
echo -e "\e[1m\e[32mConfiguring static IPv4 addresses\e[22m\e[24m\e[39m" | |
ip netns exec r1 ip addr add 192.168.2.12/24 dev vpeer-router | |
ip netns exec r1 ip a | grep vpeer-router | |
ip netns exec r1 ip addr add 192.168.1.11/24 dev veth1 | |
ip netns exec r1 ip a | grep veth1 | |
ip netns exec h1 ip addr add 192.168.1.10/24 dev vpeer1 | |
ip netns exec h1 ip a | grep vpeer1 | |
ip netns exec dhcp_server ip addr add 192.168.2.10/24 dev vpeer-dhcp | |
ip netns exec dhcp_server ip a | grep vpeer-dhcp | |
} | |
# Set Up interfaces | |
set_up_iface() | |
{ | |
echo -e "\e[1m\e[32mSet up interfaces\e[22m\e[24m\e[39m" | |
ip netns exec h1 ip link set lo up | |
ip netns exec h2 ip link set lo up | |
ip netns exec h3 ip link set lo up | |
ip netns exec r1 ip link set lo up | |
ip netns exec dhcp_server ip link set lo up | |
ip netns exec h1 ip link set vpeer1 up | |
ip netns exec h2 ip link set vpeer2 up | |
ip netns exec h3 ip link set vpeer3 up | |
ip netns exec r1 ip link set veth1 up | |
ip netns exec r1 ip link set vpeer-router up | |
ip netns exec dhcp_server ip link set vpeer-dhcp up | |
} | |
# Configure Default Gateway | |
conf_gateway() | |
{ | |
echo -e "\e[1m\e[32mConfiguring Default Gateway\e[22m\e[24m\e[39m" | |
ip netns exec h1 route del default | |
ip netns exec h1 route add default gw 192.168.1.11 | |
ip netns exec h1 route -n | |
#ip netns exec dhcp_server route del default | |
ip netns exec dhcp_server route add default gw 192.168.2.12 | |
ip netns exec dhcp_server route -n | |
} | |
# Init DHCP server | |
dhcp_server() | |
{ | |
echo -e "\e[1m\e[32mInitializing DHCP server\e[22m\e[24m\e[39m" | |
ip netns exec dhcp_server dnsmasq --port=0 --dhcp-range=vpeer-dhcp,192.168.2.1,192.168.2.11,255.255.255.0,10m --dhcp-range=vpeer-dhcp,192.168.2.13,192.168.2.254,255.255.255.0,10m --dhcp-option=3,192.168.2.12 --no-daemon | |
#ip netns exec h2 dhclient | |
#ip netns exec h2 route del default | |
#ip netns exec h2 route add default gw 192.168.2.12 | |
#ip netns exec h3 dhclient | |
#ip netns exec h3 route del default | |
#ip netns exec h3 route add default gw 192.168.2.12 | |
} | |
#Clear environment | |
clear_env() | |
{ | |
echo -e "\e[1m\e[32mCleaning environment\e[22m\e[24m\e[39m" | |
#ip link delete veth1 | |
ip link delete veth2 | |
ip link delete veth3 | |
ip link delete veth-router | |
ip link delete veth-dhcp | |
ip netns delete h1 | |
ip netns delete h2 | |
ip netns delete h3 | |
ip netns delete r1 | |
ip netns delete dhcp_server | |
ip link set sw1 down | |
brctl delbr sw1 | |
} | |
#---------------------------------------------# | |
if [[ $ARG == "" ]]; | |
then | |
autor | |
show_options | |
fi | |
if [[ $ARG == "-c" ]]; | |
then | |
autor | |
echo -e " \n\e[1m=== -------------------------------------------- ===\e[22m\e[24m\n" | |
echo -e "\n\e[1m\e[32m --- Configuring Network Topology --- \n\e[22m\e[24m" | |
create_resources | |
set_peer_link_up | |
assign_iface_NS | |
connect_to_bridge | |
conf_router | |
conf_ip_addr | |
set_up_iface | |
conf_gateway | |
dhcp_server | |
exit $EXIT_OK | |
fi | |
if [[ $ARG == "-r" ]]; | |
then | |
clear_env | |
fi | |
if [[ $ARG == "-h" ]]; | |
then | |
show_options | |
fi | |
#---------------------------------------------# |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment