From 679fd9818d3276b51a0ac681602c1e52cbe558f4 Mon Sep 17 00:00:00 2001 From: Liudmi1a Date: Tue, 27 May 2025 18:12:50 +0300 Subject: [PATCH 01/10] Update README.md --- README.md | 44 +------------------------------------------- 1 file changed, 1 insertion(+), 43 deletions(-) diff --git a/README.md b/README.md index 0d4d13f..3b2b1ab 100644 --- a/README.md +++ b/README.md @@ -1,43 +1 @@ -# Введение -Данная практика посвещена базовым принципам администрирования Linux. Для выполнения практики необходимо развернуть 3 виртуальные машины Linux. - -Как пример, можно использовать Virtual Box + Ubuntu Server 20.04. - -# Задание -Для выполнения данного задания необходимо: -1. Развернуть три виртуальные машины Linux, согласно схеме ниже - - -![info](Linux%20Practice.png) - -2. Linux A - 1. Сконфигурировать Hostname следующим образом: _server (пропустить если делаете через Play with docker) - 2. Создать пользователя _1 (пропустить если делаете через Play with docker) - 3. Сконфигурировать виртуальный интерфейс со следующим ip адресом: 192.168.<день рождения>.10/24 - 4. Развернуть Http сервер на виртуальной машине на порту 5000. Необходимо реализовать минимум три эндпоинта (запрос /get, /post, /put) -3. Linux B - 1. Сконфигурировать Hostname следующим образом: _gateway (пропустить если делаете через Play with docker) - 2. Создать пользователя _2 (пропустить если делаете через Play with docker) - 3. Сконфигурировать 2 виртуальных интерфейс со следующими ip адресом: 192.168.<день рождения>.1/24, 192.168.<месяц рождения>.10/24 - 4. С помощью утилит ip route и iptables настроить маршрут пакетов от Linux A до C. Должны быть запрещены все пакеты, кроме http пакетов через порт 5000 (маршруты обязательно, файрвол опционально) - 5. Запустить программу tcpdump с фильтрацией по портам 5000 -4. Linux C - 1. Сконфигурировать Hostname следующим образом: _client (пропустить если делаете через Play with docker) - 2. Создать пользователя _3 (пропустить если делаете через Play with docker) - 3. Сконфигурировать виртуальный интерфейс со следующим ip адресом: 192.168.<месяц рождения>.100/24 - 4. С помощью команды curl на машине C послать 3 запроса на машину А в http сервер (/get, /post, /put) -5. При перезагрузки системы все сервисы и сетевая архитектура должны также функционировать (сохранить свои настройки) -6. Сделать скриншоты всех этапов задания -7. Оформить отчет в виде Markdown файла. Приложить конфигурационные файлы в репозиторий -8. Для play with docker также нужно написать bash скрипты для воспроизведения на новых вм - - -Репозиторий оформить следующим образом: -- application - исходный код http сервера -- configs - конфигурационные файлы сетевых настроек виртуальных машин -- report.md - Отчет markdown - - -P.S. -Если не получилось использовать разные утилиты для настройки сети, используйте netplan -Смотрите [мануал](./guide/Manual.md) - там информация для virtual box и Play with docker +da From b8f3b58f84df2ef2cf3e1b8d34f78710c07f5838 Mon Sep 17 00:00:00 2001 From: Liudmi1a Date: Tue, 27 May 2025 18:15:39 +0300 Subject: [PATCH 02/10] Delete guide directory --- guide/Manual.md | 230 ------------------------------------------------ 1 file changed, 230 deletions(-) delete mode 100644 guide/Manual.md diff --git a/guide/Manual.md b/guide/Manual.md deleted file mode 100644 index d4cabdf..0000000 --- a/guide/Manual.md +++ /dev/null @@ -1,230 +0,0 @@ -# Практика Linux (с virtualbox) - -## Создание виртуальной машины -1. Скачиваем [Virtual Box](https://www.virtualbox.org/) -2. Скачиваем дистрибутив [Ubuntu Server 20.04.iso](https://ubuntu.com/download/server) -3. Создаем виртуальную машину в virtualbox. Создаем новый виртуальный диск, назначаем 1gb Ram, 10gb Rom. При запуске указываем путь до iso файла -4. Следуем инструкциям при конфигурировании ОС. Создаем юзера и название машины согласно инструкции. Сетевые настройки оставляем по умолчанию. -5. Клонируем 2 раза созданную виртуальную машину (vdi диск). Переименовываем пользователя и хоста в каждой машине согласно инструкции. -## Настройка виртуальных машин -### Linux A -1. В настройках виртуальной машины заходим в сетевые интерфейсы: - 1. Nat меняем на сетевой мост - 2. Добавляем Внутреннюю сеть (называем servernet) -2. Подключаемся к виртуальной машине. Вводим команду -```shell -ip addr -``` -Убеждаемся, что один из интерфейсов подключен к той же подсети, что и хост. Запоминаем ip адрес - -3. С помощью команды ping с хоста (ноутбука) пробуем пинговать виртуальную машину: -```shell -ping 192.168.0.109 -n 4 -``` -Если пинг идет успешно, значит виртуальная машина подключена к подсети с вашим ноутбуком. - -4. Для удобства стоит прописать ssh ключ к виртуальной машине. - -[Сгенерировать ключ](https://losst.ru/avtorizatsiya-po-klyuchu-ssh) можно командой (из терминала Linux или MobaExtern) -```shell -ssh-keygen -t rsa -N "" -f my.key -``` -По-умолчанию можно со всем согласиться. - -Далее необходимо скопировать ключ на виртуальную машину -```shell -ssh-copy-id -i my.key.pub alekseev_1@192.168.0.109 -``` - -Ввести пароль при запросе. - -Далее можно подключаться к виртуальной машине по ssh: -```shell -ssh -i my.key alekseev_1@192.168.0.109 -``` - -5. Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом: -```shell -sudo nano /etc/netplan/00-installer-config.yaml -``` - -Добавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию): - -```yaml -network: - ethernets: - enp0s3: # этот интерфейс используем для доступа с ноутбука - dhcp4: true - enp0s8: # этот интерфейс настравиваем на передачу запросов - dhcp4: no - addresses: [192.168.<день рождения>.10/24] - gateway4: 192.168.<день рождения>.1 - version: 2 -``` - -Далее сохраняем файл. Применяем настройки -```shell -sudo netplan apply -``` -6. Проверяем настройки с помощью ip addr. Сетевая настройка завершена - -### Linux B -1. В настройках виртуальной машины заходим в сетевые интерфейсы: - 1. Nat меняем на сетевой мост - 2. Добавляем Внутреннюю сеть 2 штуки (называем servernet и clientnet) -2. Подключаемся к виртуальной машине. Меняем имя хоста и юзера согласно заданию. -3. Для удобства также стоит прописать ssh ключ к виртуальной машине (Например командами добавить нового пользователя adduser (не забыть добавить в группу sudo), сменить название хоста hostname newname). -4. Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом: -```shell -sudo nano /etc/netplan/00-installer-config.yaml -``` -Добавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию): - -```yaml -network: - ethernets: - enp0s3: # этот интерфейс используем для доступа с ноутбука - dhcp4: true - enp0s8: # этот интерфейс настравиваем на передачу запросов сервера (Помните про виртуальную сеть в VirtualBox) - dhcp4: no - addresses: [192.168.<день рождения>.1/24] - enp0s9: # этот интерфейс настравиваем на передачу запросов клиента - dhcp4: no - addresses: [192.168.<месяц рождения>.1/24] - version: 2 -``` - -Далее сохраняем файл. Применяем настройки -```shell -sudo netplan apply -``` -6. Проверяем настройки с помощью ip addr. Сетевая настройка завершена - -### Linux C -1. В настройках виртуальной машины заходим в сетевые интерфейсы: - 1. Nat меняем на сетевой мост - 2. Добавляем Внутреннюю сеть 2 штуки (называем servernet и clientnet) -2. Подключаемся к виртуальной машине. Меняем имя хоста и юзера согласно заданию. -3. Для удобства также стоит прописать ssh ключ к виртуальной машине (Например командами добавить нового пользователя adduser (не забыть добавить в группу sudo), сменить название хоста hostname newname). -4. Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом: -```shell -sudo nano /etc/netplan/00-installer-config.yaml -``` -Добавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию): - -```yaml -network: - ethernets: - enp0s3: # этот интерфейс используем для доступа с ноутбука - dhcp4: true - enp0s8: # этот интерфейс настравиваем на передачу запросов - dhcp4: no - addresses: [192.168.<месяц рождения>.10/24] - gateway4: 192.168.<месяц рождения>.1 - version: 2 -``` - -Далее сохраняем файл. Применяем настройки -```shell -sudo netplan apply -``` -6. Проверяем настройки с помощью ip addr. Сетевая настройка завершена - -### Конфигурация маршрутов - -1. Наиболее простой способ с текущей конфигурацией, это разрешить переброс пакетов ip в нашем gateway -```shell -echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward 1 - - nano /etc/sysctl.conf # Также можно добавить 1 в файл для автозагрузки -``` -Таким образом виртуальные машины А и С будут видеть друг друга в сети -2. Чтобы разрешить переброс только конкретных пакетов по конкретному порту, следуюет настроить маршрут [следующим образом](https://www.digitalocean.com/community/tutorials/how-to-forward-ports-through-a-linux-gateway-with-iptables): -```shell -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 -```shell -sudo apt-get install iptables-persistent -sudo iptables-save > /etc/iptables/rules.v4 -sudo ip6tables-save > /etc/iptables/rules.v6 -``` -3. Посмотреть трафик можно [с помощью](https://unix.stackexchange.com/questions/313180/iptables-forward-chain-traffic-not-seen-by-tcpdump) - -### Веб-сервер (Машина А) -1. Для установки веб-сервера на машине А рекомендуется использовать python flask -2. Python установлен по-умолчанию. Для установки flask необходимо ввести: -```shell -pip install flask -``` -3. Создайте файл app.py и поместите следующее содержимое: -```python -from flask import Flask - -app = Flask(__name__) - -@app.route("/") -def hello_world(): - return "

Hello, World!

" - -app.run(host='0.0.0.0', port=5000) -``` -4. Запустить скрипт можно командой -```shell -python app.py -``` -5. С помощью systemd необходимо создать сервис, который запускает скрипт через автозагрузку -```shell -nano /lib/systemd/system/web-server.service -``` -Вставить следующее содержимое в файл: -```ini -[Unit] -Description=Web-Server -[Service] -Type=idle -WorkingDirectory=/home/user/server/ -ExecStart=python app.py -[Install] -WantedBy=multi-user.target -``` -Перезапустить службы и активировать автозагрузку -```shell -systemctl daemon-reload -systemctl enable web-server -``` -### Веб-клиент (Машина С) -1. Чтобы послать запрос на машину А, необходимо ввести следующую команду: -```shell -curl 'http://192.168.<день рождения>.10:5000/ -``` -2. Если поменять на сервере порт отличный от 5000 и попробовать отправить запрос, шлюз не должен пропустить пакеты - -# Практика Linux (с play with docker) -тоже самое, что "Практика Linux (с virtualbox)", но -1. вместо создание ВМ на virtualbox создаем три ВМ на https://labs.play-with-docker.com/ -2. чтобы по ssh зайти на каждую машину, нужно сгенерировать ключ протоколом ed25519 -```bash -ssh-keygen -t ed25519 -ssh @direct.labs.play-with-docker.com -``` -3. в pwd используется дистрибутив alpine, поэтому часть функционала (systemd, netplan) отсутсвует -4. настройку сети необходимо сделать с помощью ipvlan. Серевер А и С - по одному адаптеру согласно схеме. Сервер В - два адаптера согласно схеме, подсети должны быть разные -```shell -ip link add macvlan1 link eth0 type macvlan mode bridge # создаем новый адаптер с типом bridge и делаем связь адаптера с eth0 -ip address add dev macvlan1 xxx.xxx.xxx.xxx/ # добавляем ip адрес адаптеру -ip link set macvlan1 up # включаем адаптер -``` -5. прописать маршруты у клиента А и С к их подсетям через шлюз машину В -```shell -ip route add / via -``` -6. Также развернуть веб сервер на машине С и помощью curl получить ответ от веб сервера -7. настроить файрвол можно пожеланию (задание опциональное) -8. написать bash скрипт для каждой виртуальной машине, который повторяет действия сделанные вручную (в качестве проверке создайте заново 3 виртуалки, результат скрипта - сurl клиента принимает ответ от сервера из разных подсетей) \ No newline at end of file From 113134ecec3b343f36603c34b9cd8fb2ad82d196 Mon Sep 17 00:00:00 2001 From: Liudmi1a Date: Tue, 27 May 2025 18:15:47 +0300 Subject: [PATCH 03/10] Delete vms directory --- vms/ubuntu_a/application/app.py | 18 ------------------ .../configs/network/netplan/client.yml | 9 --------- 2 files changed, 27 deletions(-) delete mode 100644 vms/ubuntu_a/application/app.py delete mode 100644 vms/ubuntu_a/configs/network/netplan/client.yml diff --git a/vms/ubuntu_a/application/app.py b/vms/ubuntu_a/application/app.py deleted file mode 100644 index e54afbd..0000000 --- a/vms/ubuntu_a/application/app.py +++ /dev/null @@ -1,18 +0,0 @@ -from crypt import methods -from flask import Flask - -app = Flask(__name__) - -@app.route("/", methods=['GET']) -def hello_world(): - return "

Hello, World!

" - -@app.route("/", methods=['PUT']) -def hello_world_put(): - return "

Hello, World!

" - -@app.route("/", methods=['POST']) -def hello_world_post(): - return "

Hello, World!

" - -app.run(host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/vms/ubuntu_a/configs/network/netplan/client.yml b/vms/ubuntu_a/configs/network/netplan/client.yml deleted file mode 100644 index 653e3a4..0000000 --- a/vms/ubuntu_a/configs/network/netplan/client.yml +++ /dev/null @@ -1,9 +0,0 @@ -network: - ethernets: - enp0s3: # этот интерфейс используем для доступа с ноутбука - dhcp4: true - enp0s8: # этот интерфейс настравиваем на передачу запросов - dhcp4: no - addresses: [192.168.26.10/24] - gateway4: 192.168.26.1 - version: 2 \ No newline at end of file From 76fb0e539ad8b7f98c919a53ca17f353d423890e Mon Sep 17 00:00:00 2001 From: Liudmi1a Date: Tue, 27 May 2025 18:15:55 +0300 Subject: [PATCH 04/10] Delete Linux Practice.png --- Linux Practice.png | Bin 34423 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Linux Practice.png diff --git a/Linux Practice.png b/Linux Practice.png deleted file mode 100644 index 212b38a28258243adb5a7159ca934116f16f9f5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34423 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 From e1a283922aeaa48a7f13402f6e73ca02bd809325 Mon Sep 17 00:00:00 2001 From: Liudmi1a Date: Tue, 27 May 2025 18:16:58 +0300 Subject: [PATCH 05/10] Delete .gitignore --- .gitignore | 129 ----------------------------------------------------- 1 file changed, 129 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b6e4761..0000000 --- a/.gitignore +++ /dev/null @@ -1,129 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ From 07d49b05fcabf6abe6ff33d0b200745487db27b9 Mon Sep 17 00:00:00 2001 From: Liudmi1a Date: Tue, 27 May 2025 18:17:47 +0300 Subject: [PATCH 06/10] Update README.md --- README.md | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b2b1ab..e32dd39 100644 --- a/README.md +++ b/README.md @@ -1 +1,92 @@ -da +# linux_hw +Отчет по практической работе с виртуальными машинами на ОС Linux Ubuntu 24.04.2 + + +Работа начинается с создания и настройки виртуальных машин А, Б и С, где А - сервер, В - шлюз и С - клиент. +Ниже предствлены скрины настройки виртуальных машин и их состояние: +![lA](https://github.com/user-attachments/assets/f56d747e-8ed7-478a-8a48-09658b5529b7) +![lB](https://github.com/user-attachments/assets/3ca036d4-ab4f-49e7-8d5f-5e6af0e795ca) +![lC](https://github.com/user-attachments/assets/433c7a9b-32d3-4033-a36c-b89570f33eab) + +--- + +На всех трех виртуальных машинах был изменён 'hostname' в соответствии с заданием в файле etc/hostname : +![etc_hostnameA (1)](https://github.com/user-attachments/assets/8baf5b48-20e2-43bb-bc03-26076d1739df) +![etc_hostnameB](https://github.com/user-attachments/assets/f145e03c-e9b9-4a26-a04b-46d7b1765f26) +![etc_hostnameC](https://github.com/user-attachments/assets/3b8d81fe-23e8-4f84-8ae9-372055d5f3d0) + +После презагрузки машинам были присвоены новые 'hostname':
+ВМ А - shcerbakovaserver
ВМ Б - shcerbakovagateway
ВМ С - shcerbakovaclient + +![hostnameA](https://github.com/user-attachments/assets/98458eb8-6b85-488d-b471-c26618bdafc6) +![hostnameC](https://github.com/user-attachments/assets/0885b811-0621-45bf-97ed-7c28fbca0cac) +![hostnameB](https://github.com/user-attachments/assets/c50691a5-7f0b-4536-9761-8c06824659c0) + + +--- + +Далее была произведена конфигурация виртуальных интерфейсов на всех трех виртуальных машинах: +![netplan_ipaA](https://github.com/user-attachments/assets/2f1838c0-cf51-4bbc-90f0-5f9117383459) +![netplan_ipaB](https://github.com/user-attachments/assets/d1851135-18b0-4f61-8ec7-c6af9631bea2) +![netplan_ipaC](https://github.com/user-attachments/assets/3d826db3-6c1d-41fa-bf64-a00a6e0eb795) + +На ВМ А был для 'enp0s3' был выставлен автоматический ip-адрес, а для 'enp0s8' - "192.168.26.10/24" в соответствии с заданием;
+На ВМ Б был для 'enp0s3' был также выставлен автоматический ip-адрес, для 'enp0s8' - "192.168.26.1/24", а для enp0s9 - "192.168.6.1/24" в соответствии с заданием;
+На ВМ С был для 'enp0s3' выставлен автоматический ip-адрес, а для 'enp0s8' - "192.168.6.1/24" в соответствии с заданием; + +--- + +Перейдем к рассмотрению процесса настраивания виртуальных машин по отдельности. + +Начнем с ВМ А. + +Создан http-сервер на порту 5000. Также были реализованы три эндпоинта (запрос /get, /post, /put). Ниже представлен результат настройки: + +![flask_apppy](https://github.com/user-attachments/assets/512b78df-97f7-4326-ae00-37017c0fc1f7) + +--- + +Рассмотрит ВМ Б. + +С помощью утилит ip route и iptables были настроены маршрут пакетов от ВМ A до ВМ C и была настроена фильтрация по порту 5000. + +Настройка маршрутов представлена ниже: + +![nastroykaB](https://github.com/user-attachments/assets/86ae56c8-923b-489e-96cd-4ba0d9294faa) + +--- + +Перейдем к ВМ С. + +Ранее была представлена конфигурация ВМ С. А ниже представлены запросы, передаваемые через ВМ Б на ВМ А: + +![get_post_put](https://github.com/user-attachments/assets/c62403b9-1683-4a16-bdfb-c558d645de3c) + +Как можно заметить, ВМ С успешно получает фидбек от ВМ А. + +--- + +Теперь рассмотрит фидбек, получаемый с ВМ А, и мониторинг с помощью 'tcpdump' по порту 5000, установленный на ВМ Б. + +На скринах ниже представлено состояние ВМ А во время получения запросов с ВМ С: + +![gpp_A](https://github.com/user-attachments/assets/28b301dd-f375-4133-a2e3-430737eca823) + +Так же с помощью команды 'tcpdump' были получены логи передачи пакетов с ВМ С на ВМ А. Ниже представлены скрины. + +Мониторинг запросов GET с ВМ С на ВМ А: +![logs_get](https://github.com/user-attachments/assets/de673c05-e077-4875-b30b-166d80d0e281) + +Мониторинг запросов POST с ВМ С на ВМ А: + +![logs_post](https://github.com/user-attachments/assets/6ad2142d-cf7e-4429-8c17-16ed08de83ee) + +Мониторинг запросов PUT с ВМ С на ВМ А: + +![logs_put](https://github.com/user-attachments/assets/4c9fc810-437c-4ce1-95af-fb1dbcb4825b) + +--- + +По вышепредставленным скринам и описаниям происходящего можно сделать вывод, что все виртуальные машины были успешно настроены. Все три вида запросов с ВМ С на ВМ А через ВМ Б проходят успешно. + +--- From 5afa7f38106bfd671d4f140b94dda9956c4015cd Mon Sep 17 00:00:00 2001 From: Liudmi1a Date: Tue, 27 May 2025 18:18:37 +0300 Subject: [PATCH 07/10] Create webserver --- configs/webserver | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 configs/webserver diff --git a/configs/webserver b/configs/webserver new file mode 100644 index 0000000..ef72f76 --- /dev/null +++ b/configs/webserver @@ -0,0 +1,10 @@ +[Unit] +Description=Web-Server + +[Service] +Type=idle +WorkingDirectory=/home/user/server +ExecStart=python3 app.py + +[Install] +WantedBy=multi-user.target From 5c387160b69e7293edeb4015ce4b4b64475122de Mon Sep 17 00:00:00 2001 From: Liudmi1a Date: Tue, 27 May 2025 18:18:56 +0300 Subject: [PATCH 08/10] Create server --- configs/server | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 configs/server diff --git a/configs/server b/configs/server new file mode 100644 index 0000000..ffe1037 --- /dev/null +++ b/configs/server @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.26.10/24] + gateway4: 192.168.26.1 + version: 2 From ac79ed22dc1fae4360c26262c85d631b3cd9e21e Mon Sep 17 00:00:00 2001 From: Liudmi1a Date: Tue, 27 May 2025 18:19:14 +0300 Subject: [PATCH 09/10] Create client --- configs/client | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 configs/client diff --git a/configs/client b/configs/client new file mode 100644 index 0000000..5b8d5cd --- /dev/null +++ b/configs/client @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.6.10/24] + gateway4: 192.168.6.1 + version: 2 From 99571e370056363a2ca49366c26a65ddbca331ac Mon Sep 17 00:00:00 2001 From: Liudmi1a Date: Tue, 27 May 2025 18:19:34 +0300 Subject: [PATCH 10/10] Create gateway --- configs/gateway | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 configs/gateway diff --git a/configs/gateway b/configs/gateway new file mode 100644 index 0000000..f2509c7 --- /dev/null +++ b/configs/gateway @@ -0,0 +1,11 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.26.1/24] + enp0s9: + dhcp4: no + addresses: [192.168.6.1/24] + version: 2