- Скачиваем Virtual Box
- Скачиваем дистрибутив Ubuntu Server 20.04.iso
- Создаем виртуальную машину в virtualbox. Создаем новый виртуальный диск, назначаем 1gb Ram, 10gb Rom. При запуске указываем путь до iso файла
- Следуем инструкциям при конфигурировании ОС. Создаем юзера и название машины согласно инструкции. Сетевые настройки оставляем по умолчанию.
- Клонируем 2 раза созданную виртуальную машину (vdi диск). Переименовываем пользователя и хоста в каждой машине согласно инструкции.
- В настройках виртуальной машины заходим в сетевые интерфейсы:
- Nat меняем на сетевой мост
- Добавляем Внутреннюю сеть (называем servernet)
- Подключаемся к виртуальной машине. Вводим команду
ip addrУбеждаемся, что один из интерфейсов подключен к той же подсети, что и хост. Запоминаем ip адрес
- С помощью команды ping с хоста (ноутбука) пробуем пинговать виртуальную машину:
ping 192.168.0.109 -n 4Если пинг идет успешно, значит виртуальная машина подключена к подсети с вашим ноутбуком.
- Для удобства стоит прописать ssh ключ к виртуальной машине.
Сгенерировать ключ можно командой (из терминала Linux или MobaExtern)
ssh-keygen -t rsa -N "" -f my.keyПо-умолчанию можно со всем согласиться.
Далее необходимо скопировать ключ на виртуальную машину
ssh-copy-id -i my.key.pub alekseev_1@192.168.0.109Ввести пароль при запросе.
Далее можно подключаться к виртуальной машине по ssh:
ssh -i my.key alekseev_1@192.168.0.109- Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом:
sudo nano /etc/netplan/00-installer-config.yamlДобавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию):
network:
ethernets:
enp0s3: # этот интерфейс используем для доступа с ноутбука
dhcp4: true
enp0s8: # этот интерфейс настравиваем на передачу запросов
dhcp4: no
addresses: [192.168.<день рождения>.10/24]
gateway4: 192.168.<день рождения>.1
version: 2Далее сохраняем файл. Применяем настройки
sudo netplan apply- Проверяем настройки с помощью ip addr. Сетевая настройка завершена
- В настройках виртуальной машины заходим в сетевые интерфейсы:
- Nat меняем на сетевой мост
- Добавляем Внутреннюю сеть 2 штуки (называем servernet и clientnet)
- Подключаемся к виртуальной машине. Меняем имя хоста и юзера согласно заданию.
- Для удобства также стоит прописать ssh ключ к виртуальной машине (Например командами добавить нового пользователя adduser (не забыть добавить в группу sudo), сменить название хоста hostname newname).
- Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом:
sudo nano /etc/netplan/00-installer-config.yamlДобавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию):
network:
ethernets:
enp0s3: # этот интерфейс используем для доступа с ноутбука
dhcp4: true
enp0s8: # этот интерфейс настравиваем на передачу запросов сервера (Помните про виртуальную сеть в VirtualBox)
dhcp4: no
addresses: [192.168.<день рождения>.1/24]
enp0s9: # этот интерфейс настравиваем на передачу запросов клиента
dhcp4: no
addresses: [192.168.<месяц рождения>.1/24]
version: 2Далее сохраняем файл. Применяем настройки
sudo netplan apply- Проверяем настройки с помощью ip addr. Сетевая настройка завершена
- В настройках виртуальной машины заходим в сетевые интерфейсы:
- Nat меняем на сетевой мост
- Добавляем Внутреннюю сеть 2 штуки (называем servernet и clientnet)
- Подключаемся к виртуальной машине. Меняем имя хоста и юзера согласно заданию.
- Для удобства также стоит прописать ssh ключ к виртуальной машине (Например командами добавить нового пользователя adduser (не забыть добавить в группу sudo), сменить название хоста hostname newname).
- Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом:
sudo nano /etc/netplan/00-installer-config.yamlДобавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию):
network:
ethernets:
enp0s3: # этот интерфейс используем для доступа с ноутбука
dhcp4: true
enp0s8: # этот интерфейс настравиваем на передачу запросов
dhcp4: no
addresses: [192.168.<месяц рождения>.10/24]
gateway4: 192.168.<месяц рождения>.1
version: 2Далее сохраняем файл. Применяем настройки
sudo netplan apply- Проверяем настройки с помощью ip addr. Сетевая настройка завершена
- Наиболее простой способ с текущей конфигурацией, это разрешить переброс пакетов ip в нашем gateway
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward 1
nano /etc/sysctl.conf # Также можно добавить 1 в файл для автозагрузкиТаким образом виртуальные машины А и С будут видеть друг друга в сети 2. Чтобы разрешить переброс только конкретных пакетов по конкретному порту, следуюет настроить маршрут следующим образом:
iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport 5000 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P FORWARD DROP
Также необходимо сохранить правила iptables
sudo apt-get install iptables-persistent
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6- Посмотреть трафик можно с помощью
- Для установки веб-сервера на машине А рекомендуется использовать python flask
- Python установлен по-умолчанию. Для установки flask необходимо ввести:
pip install flask- Создайте файл app.py и поместите следующее содержимое:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
app.run(host='0.0.0.0', port=5000)- Запустить скрипт можно командой
python app.py- С помощью systemd необходимо создать сервис, который запускает скрипт через автозагрузку
nano /lib/systemd/system/web-server.serviceВставить следующее содержимое в файл:
[Unit]
Description=Web-Server
[Service]
Type=idle
WorkingDirectory=/home/user/server/
ExecStart=python app.py
[Install]
WantedBy=multi-user.targetПерезапустить службы и активировать автозагрузку
systemctl daemon-reload
systemctl enable web-server- Чтобы послать запрос на машину А, необходимо ввести следующую команду:
curl 'http://192.168.<день рождения>.10:5000/- Если поменять на сервере порт отличный от 5000 и попробовать отправить запрос, шлюз не должен пропустить пакеты
тоже самое, что "Практика Linux (с virtualbox)", но
- вместо создание ВМ на virtualbox создаем три ВМ на https://labs.play-with-docker.com/
- чтобы по ssh зайти на каждую машину, нужно сгенерировать ключ протоколом ed25519
ssh-keygen -t ed25519
ssh <domain-name>@direct.labs.play-with-docker.com- в pwd используется дистрибутив alpine, поэтому часть функционала (systemd, netplan) отсутсвует
- настройку сети необходимо сделать с помощью ipvlan. Серевер А и С - по одному адаптеру согласно схеме. Сервер В - два адаптера согласно схеме, подсети должны быть разные
ip link add macvlan1 link eth0 type macvlan mode bridge # создаем новый адаптер с типом bridge и делаем связь адаптера с eth0
ip address add dev macvlan1 xxx.xxx.xxx.xxx/<mask> # добавляем ip адрес адаптеру
ip link set macvlan1 up # включаем адаптер- прописать маршруты у клиента А и С к их подсетям через шлюз машину В
ip route add <subnet A vm>/<mask> via <gateway ip B vm>- Также развернуть веб сервер на машине С и помощью curl получить ответ от веб сервера
- настроить файрвол можно пожеланию (задание опциональное)
- написать bash скрипт для каждой виртуальной машине, который повторяет действия сделанные вручную (в качестве проверке создайте заново 3 виртуалки, результат скрипта - сurl клиента принимает ответ от сервера из разных подсетей)