diff --git a/app/app.py b/app/app.py new file mode 100644 index 0000000..87c54e8 --- /dev/null +++ b/app/app.py @@ -0,0 +1,18 @@ +from flask import Flask, request + +app = Flask(__name__) + +@app.route('/get', methods=['GET']) +def get_route(): + return "route get is working!\n" + +@app.route('/post', methods=['POST']) +def post_route(): + return f"route post is working!: {request.json}\n" + +@app.route('/put', methods=['PUT']) +def put_route(): + return f"route put is working!: {request.json}\n" + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/configs/A.yaml b/configs/A.yaml new file mode 100644 index 0000000..f2b592e --- /dev/null +++ b/configs/A.yaml @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.7.10/24] + gateway4: 192.168.7.1 + version: 2 \ No newline at end of file diff --git a/configs/B.yaml b/configs/B.yaml new file mode 100644 index 0000000..ab469c6 --- /dev/null +++ b/configs/B.yaml @@ -0,0 +1,11 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.7.1/24] + enp0s9: + dhcp4: no + addresses: [192.168.1.1/24] + version: 2 \ No newline at end of file diff --git a/configs/C.yaml b/configs/C.yaml new file mode 100644 index 0000000..48b3880 --- /dev/null +++ b/configs/C.yaml @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.1.10/24] + gateway4: 192.168.1.1 + version: 2 \ No newline at end of file diff --git a/pics/curl.png b/pics/curl.png new file mode 100644 index 0000000..edf16bd Binary files /dev/null and b/pics/curl.png differ diff --git a/pics/iptables.png b/pics/iptables.png new file mode 100644 index 0000000..fabe37c Binary files /dev/null and b/pics/iptables.png differ diff --git a/pics/netplan_1.png b/pics/netplan_1.png new file mode 100644 index 0000000..ae682a0 Binary files /dev/null and b/pics/netplan_1.png differ diff --git a/pics/netplan_2.png b/pics/netplan_2.png new file mode 100644 index 0000000..b26357a Binary files /dev/null and b/pics/netplan_2.png differ diff --git a/pics/netplan_3.png b/pics/netplan_3.png new file mode 100644 index 0000000..e3e8d91 Binary files /dev/null and b/pics/netplan_3.png differ diff --git a/pics/py.png b/pics/py.png new file mode 100644 index 0000000..4053054 Binary files /dev/null and b/pics/py.png differ diff --git a/pics/py_in_work.png b/pics/py_in_work.png new file mode 100644 index 0000000..85d8771 Binary files /dev/null and b/pics/py_in_work.png differ diff --git a/pics/tcpdump_get.png b/pics/tcpdump_get.png new file mode 100644 index 0000000..84b204a Binary files /dev/null and b/pics/tcpdump_get.png differ diff --git a/pics/tcpdump_post.png b/pics/tcpdump_post.png new file mode 100644 index 0000000..720ed89 Binary files /dev/null and b/pics/tcpdump_post.png differ diff --git a/pics/tcpdump_put.png b/pics/tcpdump_put.png new file mode 100644 index 0000000..c5b33a1 Binary files /dev/null and b/pics/tcpdump_put.png differ diff --git a/report.md b/report.md new file mode 100644 index 0000000..f9165c7 --- /dev/null +++ b/report.md @@ -0,0 +1,54 @@ +Отчет по практической работе с виртуальными машинами на ОС Linux Ubuntu 24.04.2 + +--- + +Для начала создаём и настраиваем виртуальные машины A,B,C: из образа Ubuntu Server создаём машину A, а затем дважды клонируем её. После создания виртуальных машин необходимо добавить им соответствующие сетевые адаптеры (внутренняя сеть) для подсетей servernet и clientnet, а также заменить NAT на сетевой мост (по заданию). После этого на каждой машине вручную задаем новый hostname и user. +- Для машины A это - user (milekhin_1) и hostname (milekhin_server) +- Для машины B это - user (milekhin_2) и hostname (milekhin_gateway) +- Для машины C это - user (milekhin_3) и hostname (milekhin_client) + +--- + +После настройки виртуальных машин переходим к конфигурации сети. Меняем конфиги netplan на каждой машине по заданию. Для применения новых сетевых настроек используем команду `sudo netplan apply`. День рождения: 07.01.2003. +- Для машины A это - 'enp0s8' - "192.168.7.10/24" +- Для машины B это - 'enp0s8' - "192.168.7.1/24", а для enp0s9 - "192.168.1.1/24" +- Для машины C это - 'enp0s8' - "192.168.1.1/24". + +![Netplan A](pics/netplan_1.png) +![Netplan B](pics/netplan_2.png) +![Netplan C](pics/netplan_3.png) + +--- + +ИНДИВИДУАЛЬНАЯ НАСТРОЙКА ВИРТУАЛЬНЫХ МАШИН + +--- + +Перейдем к написанию веб-приложения (для использования Flask его необходимо скачать) на машине A. Реализуем программу с тремя базовыми эндпоинтами. +После реализации программы создаем сервис, которые будет запускать приложение при запуске системы. Весь код приложен ниже: + +![app](pics/py.png) + +--- + +Далее настроим на машине B iptables для маршрутизации пакетов от машины A до машины C. Также необходимо реализовать фильтрацию пакетов по порту 5000. Помимо этого для работы шлюза нужно выставить ip_forward=1 в настройках системы в файле /etc/sysctl.conf. Настройки iptables приложены ниже: + +![iptables](pics/iptables.png) + +--- + +ТЕСТИРОВАНИЕ + +--- + +- На машине A: запустим приложение на Flask +- На машине B: запустим tcpdump, чтобы можно было отслеживать пересылку пакетов между машинами A и C +- На машине С: начнём отправлять поочередно три запроса через curl: + +![py](pics/py_in_work.png) +![curl](pics/curl.png) +![tcpGET](pics/tcpdump_get.png) +![tcpPOST](pics/tcpdump_post.png) +![tcpPUT](pics/tcpdump_put.png) + +Всё безотказно работает, система полностью настроена согласно изначальному заданию. \ No newline at end of file