s4ros

docker-macvlan-network-PoC.sh

Aug 4th, 2021 (edited)
644
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2.  
  3. set -x
  4. set -u
  5. set -e
  6. set -o pipefail
  7.  
  8. # ustawiamy sobie kilka zmiennych
  9. ETH_INT=$(ip route | grep ^default | cut -d ' ' -f 5) # z wyniku polecenia `ip route` pobieramy wiersz
  10.                                                      # zaczynający się od `default` następnie robimy
  11.                                                     # string split z separatorem na "spację" i wyciągamy piąty element
  12.                                                    # - w tym przypadku nazwę interfejsu sieciowego
  13. IP_GW=$(ip route | grep ^default | cut -d ' ' -f 3)  # jak wyżej, tylko, że zamiast piątego elementu,
  14.                                                     # bierzemy trzeci - czyli adres IP przypisany do interfejsu
  15. IP_BASE=${IP_GW%.*}  # bash env substract - wycinamy ostatni człon po kropce,
  16.                      # np. dla 192.168.0.10 w zmiennej zostanie tylko 192.168.0
  17.  
  18. # tworzymy nowy wirtualny mostek sieciowy "bridge2" linkujący do naszego głównego interfejsu sieciowego
  19. sudo ip link add bridge2 link ${ETH_INT} type macvlan mode bridge
  20. # podnosimy wirtualny interface
  21. sudo ip link set bridge2 up
  22. # przypisujemy adres IP z maską do interfejsu
  23. sudo ip addr add ${IP_BASE}.192/29 dev bridge2
  24. # tworzymy sieć dockerową z driverem macvlan i odpowiednimi ustawieniami sieci
  25. docker network create -d macvlan -o parent=${ETH_INT} --gateway ${IP_GW} --subnet ${IP_BASE}.0/24 --ip-range ${IP_BASE}.198/30 bridge2
  26. # uruchamiamy kontener nginx w nowej sieci
  27. docker run --rm --name nginx -itd --network bridge2 nginx:alpine
  28. # sprawdzamy, czy możemy pobrać zawartość `/` z nginx odpytując go po adresie z puli subnetu hosta
  29. curl ${IP_BASE}.196
  30.  
  31. # docker kill nginx
  32. # docker network rm bridge2
  33. # sudo ip link delete bridge2
RAW Paste Data