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