├── README.md ├── ansible ├── README.md ├── assignIpAddress │ └── README.md ├── changeHostnameViaESXi │ ├── 1.png │ └── README.md ├── changeHostnameViaSSH │ └── README.md ├── configurationOSPF │ └── README.md ├── createStend │ ├── createVirualNet │ │ ├── README.md │ │ └── pic1.png │ └── deployVMs │ │ ├── README.md │ │ ├── configure_interface_mgmt.sh │ │ ├── pic1.png │ │ └── pic2.png ├── createStructireProject │ └── README.md ├── createTunnelInterfaces │ └── README.md ├── init │ ├── connectVSCodeToAnsible │ │ ├── README.md │ │ ├── pic1.png │ │ ├── pic2.png │ │ ├── pic3.png │ │ ├── pic4.png │ │ ├── pic5.png │ │ ├── pic6.png │ │ └── pic7.png │ ├── createVMsTemplate │ │ ├── README.md │ │ ├── ovftool.zip │ │ ├── pic1.png │ │ ├── pic10.png │ │ ├── pic2.png │ │ ├── pic3.png │ │ ├── pic4.png │ │ ├── pic5.png │ │ ├── pic6.png │ │ ├── pic7.png │ │ ├── pic8.png │ │ └── pic9.png │ ├── createVirtualEnv │ │ ├── README.md │ │ └── pic1.png │ ├── initSettings │ │ └── README.md │ ├── initVMs │ │ ├── README.md │ │ ├── pic1.png │ │ └── pic2.png │ ├── installAnsible │ │ ├── README.md │ │ └── pic1.png │ └── installPython3.12 │ │ ├── README.md │ │ ├── pic1.png │ │ └── pic2.png └── mount-local-repo │ └── README.md ├── задание ├── README.md ├── topology.png └── Модуль 1 - Задание №1.md └── решение └── Модуль 1 ├── README.md ├── backup └── README.md ├── createDHCPServer ├── README.md ├── pic1.png ├── pic2.png └── pic3.png ├── createDynamicRouting ├── installFRRtoInternet │ ├── README.md │ ├── pic1.png │ ├── pic2.png │ ├── pic3.png │ ├── pic4.png │ └── pic5.png └── settingsFRR │ ├── README.md │ ├── pic1.png │ ├── pic2.png │ ├── pic3.png │ └── pic4.png ├── createIPAddresses ├── README.md ├── assignHostname │ └── README.md ├── assignIPAddressesNMTui │ ├── README.md │ ├── pic1.png │ ├── pic2.png │ ├── pic3.png │ ├── pic4.png │ ├── pic5.png │ └── pic6.png ├── assignIPAdressesEtcnet │ ├── BR-R.md │ ├── BR-SRV.md │ ├── HQ-R.md │ ├── HQ-SRV.md │ ├── README.md │ ├── pic1.png │ ├── pic2.png │ ├── pic3.png │ ├── pic4.png │ ├── pic5.png │ ├── pic6.png │ ├── pic7.png │ └── pic8.png └── createTunnel │ ├── README.md │ ├── pic1.png │ └── pic2.png ├── createStend ├── connectToConsole │ ├── README.md │ ├── pic1.png │ ├── pic2.png │ ├── pic3.png │ ├── pic4.png │ ├── pic8.png │ └── pic9.png ├── connectVirtualMashinToInternet │ ├── README.md │ ├── pic1.png │ ├── pic2.png │ ├── pic3.png │ ├── pic4.png │ ├── pic5.png │ ├── pic6.png │ ├── pic7.png │ ├── pic8.png │ └── pic9.png ├── connectingVirtualMashin │ ├── README.md │ ├── pic1.png │ ├── pic2.png │ └── pic3.png ├── createLocalRepo │ ├── README.md │ ├── pic1.png │ ├── pic2.png │ ├── pic3.png │ ├── pic4.png │ ├── pic5.png │ ├── pic6.png │ ├── pic7.png │ └── pic8.png ├── createVirtualConnect │ ├── README.md │ ├── pic1-1.png │ ├── pic1-2.png │ ├── pic1-3.png │ └── pic1-4.png ├── createVirtualMashin │ ├── README.md │ ├── pic1-10.png │ ├── pic1-5.png │ ├── pic1-6.png │ ├── pic1-7.png │ ├── pic1-8.png │ └── pic1-9.png ├── instalNMTui │ ├── README.md │ ├── pic1.png │ ├── pic2.png │ └── pic3.png ├── installAltLinux │ ├── README.md │ ├── pic1-11.png │ ├── pic1-12.png │ ├── pic1-13.png │ ├── pic1-14.png │ ├── pic1-15.png │ ├── pic1-16.png │ ├── pic1-17.png │ ├── pic1-18.png │ ├── pic1-19.png │ └── pic1-20.png └── updateAltLinux │ └── README.md ├── createUserName ├── README.md └── pic1.png ├── iperf ├── README.md └── pic1.png └── Топология.jpg /README.md: -------------------------------------------------------------------------------- 1 | # Решение демонстрационного экзамена по специальности 09.02.06 Сетевое и системное администрирование 2 | 3 | Задание: 4 | 5 | 1. Модуль 1 [->](./задание/Модуль%201%20-%20Задание%20№1.md) 6 | 7 | 8 | Решение: 9 | 10 | 1. Модуль 1 [->](./решение/Модуль%201/README.md) -------------------------------------------------------------------------------- /ansible/README.md: -------------------------------------------------------------------------------- 1 | # Автоматизация настройки устройств 2 | 3 | 0. Подготовка 4 | - 0.1 Установка Python3.12 [->](./init/installPython3.12/README.md) 5 | - 0.2 Создание виртуального окружения [->](./init/createVirtualEnv/README.md) 6 | - 0.3 Подключение VSCode к виртуальной машине [->](./init/connectVSCodeToAnsible/README.md) 7 | - 0.4 Установка Ansible [->](./init/installAnsible/README.md) 8 | - 0.5 Начальная настройка Ansible [->](./init/initSettings/README.md) 9 | - 0.5 Начальная настройка VMs если они уже созданы на стенде [->](./init/initVMs/README.md) 10 | - 0.6 Подготовка шаблона виртуальной машины для сборки стенда. [->]() 11 | 1. Создание стенда 12 | - 1.1 Настройка виртуальных сетей [->](./createStend/createVirualNet/README.md) 13 | - 1.2 Разворачивание виртуальных машин [->](./createStend/deployVMs/README.md) 14 | 2. Начальная настрока машин. 15 | - 2.1 Монтируем локалный репозиторий на DVD диске [->](./mount-local-repo/README.md) 16 | - 2.2 Настраиваем имя хоста [->](./changeHostnameViaSSH/README.md) 17 | - 2.3 Настройка шлюза по умолчанию и туннелей. [->](./createTunnelInterfaces/README.md) 18 | - 2.3 Установка и настройка FRR [->](./configurationOSPF/README.md) -------------------------------------------------------------------------------- /ansible/assignIpAddress/README.md: -------------------------------------------------------------------------------- 1 | ### Назначаем IP на интерфейсы 2 | 3 | ``` 4 | --- 5 | 6 | - name: Create folder for interfaces 7 | ansible.builtin.file: 8 | path: "/etc/net/ifaces/{{ item['ifname'] }}" 9 | state: directory 10 | mode: '0777' 11 | loop: "{{ vars.vars.interfaces }}" 12 | - name: Creating a file with IP address 13 | ansible.builtin.copy: 14 | dest: "/etc/net/ifaces/{{ item['ifname'] }}/ipv4address" 15 | content: "{{ item['ifaddr']+item['mask'] }}" 16 | mode: '0777' 17 | loop: "{{ vars.vars.interfaces }}" 18 | - name: Create file options fot interfaces 19 | ansible.builtin.copy: 20 | dest: "/etc/net/ifaces/{{ item['ifname'] }}/options" 21 | content: "TYPE=eth 22 | DISABLE=no 23 | NM_CONTROLLED=no 24 | BOOTPROTO=static 25 | CONFIG_IPV4=yes" 26 | mode: '0777' 27 | loop: "{{ vars.vars.interfaces }}" 28 | - name: Enable routing 29 | shell: 30 | cmd: "sed -i -e 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/net/sysctl.conf" 31 | - name: Setting default gateway on Servers 32 | when: item['gw'] is defined 33 | ansible.builtin.copy: 34 | dest: "/etc/net/ifaces/{{ item['ifname'] }}/ipv4route" 35 | content: "default via {{ item['gw'] }}" 36 | mode: '0777' 37 | loop: "{{ vars.vars.interfaces }}" 38 | - name: Restart network 39 | ansible.builtin.systemd: 40 | name: network 41 | state: restarted 42 | 43 | ``` -------------------------------------------------------------------------------- /ansible/changeHostnameViaESXi/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/changeHostnameViaESXi/1.png -------------------------------------------------------------------------------- /ansible/changeHostnameViaESXi/README.md: -------------------------------------------------------------------------------- 1 | ### Изменение hostname на виртуальной машине через ESXi 2 | 3 | Для того, чтобы данный способ работал нужно на виртуалку установить `open-vm-tools-desktop` 4 | 5 | В папке с виртуальным окружение создайте `playbook` с название `changeHostname.yaml` 6 | 7 | ``` 8 | --- 9 | 10 | - name: Настрока hostname 11 | hosts: esxi 12 | connection: local 13 | tasks: 14 | - name: Меняем имя хоста 15 | community.vmware.vmware_vm_shell: 16 | validate_certs: no 17 | hostname: "10.12.66.1" # IP вашего ESXi 18 | username: "root" # Имя пользователя для ESXi 19 | password: "P@ssw0rd" # Пароль пользователя для ESXi 20 | vm_id: "DEMO-ISP - 5001" # Имя виртуальной машины 21 | vm_username: root # Имя пользователя для виртуальной машины 22 | vm_password: P@ssw0rd # Пароль пользователя для виртуальной машины 23 | vm_shell: "/usr/bin/hostnamectl" # Полный путь до команды 24 | vm_shell_args: "set-hostname ISP-22" # Аргументы команды 25 | delegate_to: localhost 26 | ``` 27 | 28 | Запускаем скрипт 29 | 30 | ``` 31 | ansible-playbook changeHostname.yaml 32 | ``` 33 | 34 | Результат: 35 | 36 |

37 | 38 |

39 | 40 | Также проверьте, что имя хоста изменилась на виртуалке -------------------------------------------------------------------------------- /ansible/changeHostnameViaSSH/README.md: -------------------------------------------------------------------------------- 1 | # Изменение hostname 2 | 3 | Итоговый `play-book` 4 | 5 | ``` 6 | --- 7 | 8 | - name: Настройка hostname 9 | hosts: VMs 10 | tasks: 11 | - name: Меняем имя хоста 12 | ansible.builtin.hostname: 13 | name: "{{ inventory_hostname }}" 14 | ``` -------------------------------------------------------------------------------- /ansible/configurationOSPF/README.md: -------------------------------------------------------------------------------- 1 | # Установка и настройка FRR 2 | 3 | Законченный play-book 4 | 5 | ``` 6 | --- 7 | 8 | - name: Установка и настрока FRR 9 | hosts: HQ-R, BR-R 10 | tasks: 11 | - name: Устанавливаем пакет frr 12 | shell: apt-get install -y frr 13 | 14 | - name: Включаем OSPF 15 | shell: sed -i -e 's/ospfd=no/ospfd=yes/g' /etc/frr/daemons 16 | 17 | - name: Создаем конфигурацию из шаблона 18 | template: 19 | src=ospf.j2 20 | dest=/etc/frr/frr.conf 21 | 22 | - name: Перезагружаем FRR 23 | ansible.builtin.systemd: 24 | name: frr 25 | state: restarted 26 | ``` 27 | ## Теперь подробнее. 28 | 29 | 30 | Предварительно установим дополнительный модуль `netaddr` для `python` 31 | 32 | ``` 33 | pip install netaddr 34 | ``` 35 | 36 | Устанавливаем `OSPF` 37 | 38 | ``` 39 | - name: Устанавливаем пакет frr 40 | shell: apt-get install -y frr 41 | ``` 42 | 43 | Включаем `OSPF` в `FRR` 44 | 45 | ``` 46 | - name: Включаем OSPF 47 | shell: sed -i -e 's/ospfd=no/ospfd=yes/g' /etc/frr/daemons 48 | ``` 49 | 50 | Генерируем конфигурацию для `FRR` из шаблона `Jinja2`. Шаблон предварительно должен быть создан. 51 | 52 | Генерируем шаблон. Для этого создаем файл `ospf.j2` рядом с плайбуком 53 | 54 | ``` 55 | log file /var/log/frr/frr.log 56 | no ipv6 forwarding 57 | ! 58 | interface tunnel1 59 | no ip ospf passive 60 | exit 61 | ! 62 | router ospf 63 | passive-interface default 64 | 65 | {% for item in vars.vars.interfaces %} 66 | {% if item.ospf is defined %} 67 | {% set ipv4_host = item.ifaddr+item.mask %} 68 | network {{ ipv4_host | ansible.utils.ipaddr('network/prefix') }} area 0 69 | {% endif %} 70 | {% endfor %} 71 | 72 | {% for item in vars.vars.tunnels %} 73 | {% if item.ospf is defined %} 74 | {% set ipv4_host = item.ifaddr+item.mask %} 75 | network {{ ipv4_host | ansible.utils.ipaddr('network/prefix') }} area 0 76 | {% endif %} 77 | {% endfor %} 78 | 79 | exit 80 | ! 81 | ``` 82 | 83 | Объясню что происходит. 84 | 85 | Это блок цикла. Все что находится внутри повторится столько раз сколько записей лежит в `vars.vars.interfaces` 86 | 87 | ``` 88 | {% for item in vars.vars.interfaces %} 89 | 90 | {% endfor %} 91 | ``` 92 | 93 | Это блок условия. Мы проверяем определена ли переменная `item.ospf`. 94 | Она береться из инвентарного файла. 95 | 96 | ``` 97 | {% if item.ospf is defined %} 98 | 99 | {% endif %} 100 | ``` 101 | 102 | Этот блок создает переменную `ipv4_host` в которой храниться строка формата `X.X.X.X/XX` 103 | 104 | ``` 105 | {% set ipv4_host = item.ifaddr+item.mask %} 106 | ``` 107 | 108 | Этот блок извлекает из переменной `ipv4_host` адрес сети с префиксом 109 | 110 | ``` 111 | network {{ ipv4_host | ansible.utils.ipaddr('network/prefix') }} area 0 112 | ``` 113 | 114 | Такие же действия делаем для туннельных интерфейсов. 115 | 116 | Эта задача гененируем конфигурацию OSPF для каждого хоста. 117 | 118 | ``` 119 | - name: Создаем конфигурацию из шаблона 120 | template: 121 | src=ospf.j2 122 | dest=/etc/frr/frr.conf 123 | ``` 124 | 125 | Перезагружаем FRR 126 | 127 | ``` 128 | - name: Перезагружаем FRR 129 | ansible.builtin.systemd: 130 | name: frr 131 | state: restarted 132 | ``` 133 | -------------------------------------------------------------------------------- /ansible/createStend/createVirualNet/README.md: -------------------------------------------------------------------------------- 1 | # Автоматизация сборки стенда 2 | 3 | Конечный результат будет выглядить вот так: 4 | 5 | ``` 6 | --- 7 | 8 | - name: Настройка виртуальных подключений на ESXi 9 | hosts: esxi 10 | tasks: 11 | - name: Добавляем виртуальный коммутатор 12 | community.vmware.vmware_vswitch: 13 | validate_certs: false 14 | hostname: '{{ esxi_hostname }}' 15 | username: '{{ esxi_username }}' 16 | password: '{{ esxi_password }}' 17 | switch: '{{ item.name }}' 18 | mtu: 9000 19 | security: 20 | promiscuous_mode: true 21 | mac_changes: true 22 | forged_transmits: true 23 | delegate_to: localhost 24 | loop: "{{ vars.vars.vswitchs }}" 25 | 26 | - name: Добавление порт-групп на виртуальный коммутатор 27 | community.vmware.vmware_portgroup: 28 | validate_certs: false 29 | hostname: '{{ esxi_hostname }}' 30 | username: '{{ esxi_username }}' 31 | password: '{{ esxi_password }}' 32 | switch: '{{ item[0].name }}' 33 | hosts: ['{{ esxi_hostname }}'] 34 | portgroup: '{{ item[1].name }}' 35 | vlan_id: '{{ item[1].vlan }}' 36 | delegate_to: localhost 37 | with_subelements: 38 | - "{{ vars.vars.vswitchs }}" 39 | - port_groups 40 | ``` 41 | 42 | 43 | playbook будет запущен для конкретного хоста `esxi` 44 | 45 | ``` 46 | - name: Настройка виртуальных подключений на ESXi 47 | hosts: esxi 48 | tasks: 49 | ``` 50 | 51 | 52 | Весть `playbook` состот из двух задач. Разберем их подробнее 53 | 54 | ## Задача №1 - Добавляем виртуальный коммутатор 55 | 56 | ``` 57 | - name: Добавляем виртуальный коммутатор 58 | community.vmware.vmware_vswitch: 59 | validate_certs: false 60 | hostname: '{{ esxi_hostname }}' 61 | username: '{{ esxi_username }}' 62 | password: '{{ esxi_password }}' 63 | switch: '{{ item.name }}' 64 | mtu: 9000 65 | security: 66 | promiscuous_mode: true 67 | mac_changes: true 68 | forged_transmits: true 69 | delegate_to: localhost 70 | loop: "{{ vars.vars.vswitchs }}" 71 | ``` 72 | 73 | `community.vmware.vmware_vswitch:` - набор для управления виртуальными коммутаторами от VMware - Подробнее [здесь](https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vswitch_module.html) 74 | 75 | `validate_certs: false` - Отключаем проверку сертификата при Подключение 76 | 77 | Это переменные для подключения к ESXi. Беруться они из инвентарного файла 78 | 79 | ``` 80 | hostname: '{{ esxi_hostname }}' 81 | username: '{{ esxi_username }}' 82 | password: '{{ esxi_password }}' 83 | ``` 84 | 85 | `loop: "{{ vars.vars.vswitchs }}"` - запускает цикл для переменной `vswitchs`. Эта переменная находится в инвентарном файле и привязана к хосту под названием `esxi`. 86 | 87 | Каждый элемент массива `vswitchs` записывается в переменную `item` к которой мы можем обратиться внутри задачи 88 | 89 | `switch: '{{ item.name }}'` - Задаем имя свича 90 | 91 | 92 | Это просто настройки виртуального свича 93 | ``` 94 | mtu: 9000 95 | security: 96 | promiscuous_mode: true 97 | mac_changes: true 98 | forged_transmits: true 99 | ``` 100 | 101 | `delegate_to: localhost` - Обязательный параметр. Нужен чтобы эта задача выполнялась на хосте с Ansible. Иначе Ansible попытается подключиться к esxi и выпольнить ее на нем. 102 | 103 | ## Задача №2 - Добавление порт-групп на виртуальный коммутатор 104 | 105 | ``` 106 | - name: Добавление порт-групп на виртуальный коммутатор 107 | community.vmware.vmware_portgroup: 108 | validate_certs: false 109 | hostname: '{{ esxi_hostname }}' 110 | username: '{{ esxi_username }}' 111 | password: '{{ esxi_password }}' 112 | switch: '{{ item[0].name }}' 113 | hosts: ['{{ esxi_hostname }}'] 114 | portgroup: '{{ item[1].name }}' 115 | vlan_id: '{{ item[1].vlan }}' 116 | delegate_to: localhost 117 | with_subelements: 118 | - "{{ vars.vars.vswitchs }}" 119 | - port_groups 120 | ``` 121 | 122 | Подробнее про коллекцию `community.vmware.vmware_portgroup` [здесь](https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_portgroup_module.html) 123 | 124 | Эта задача немного сложнее предыдущей. 125 | 126 | Обратите внимание на инструкцию `with_subelements:` 127 | 128 | При помощи нее мы делаем вложенный цикл. 129 | 130 | Напомню, что в переменной `vswitchs` может лежать не один коммутатор а несколько. Поэтому нам нужно перебрать их, а внутри каждого лежит список `port_groups`, который также нужно перебрать. 131 | 132 | Получается мы запускаем цикла для `"{{ vars.vars.vswitchs }}"`, а внутри него запускаем цикл для `port_groups`, которая находится в текущем элементе первого цыкла. 133 | 134 | Чтобы внутри задачи обратиться к текущему элементу первого цыкла используем переменную `{{ item[0] }}`, а чтобы обратиться к текущему элементу вложенного цыкла используем переменную `{{ item[1] }}` 135 | 136 | ## Результат выполнения playbook 137 | 138 |

139 | 140 |

-------------------------------------------------------------------------------- /ansible/createStend/createVirualNet/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/createStend/createVirualNet/pic1.png -------------------------------------------------------------------------------- /ansible/createStend/deployVMs/README.md: -------------------------------------------------------------------------------- 1 | # Автоматическое развертывание виртуальных машин из шаблона 2 | 3 | 4 | В этом `playbook` нам понадобиться выполнение `bash` скрипта, который лежит тут [рядышком](./configure_interface_mgmt.sh). В нем есть комментарии. Почитайте их. 5 | 6 | Конечный `playbook` выглядит вот так: 7 | 8 | ``` 9 | --- 10 | 11 | - name: Разворачивание VMs и настройка доступа для управления через SSH 12 | hosts: VMs 13 | gather_facts: no 14 | tasks: 15 | - name: Разворачиваем VMs из шаблона 16 | community.vmware.vmware_deploy_ovf: 17 | validate_certs: false 18 | hostname: '{{ esxi_hostname }}' 19 | username: '{{ esxi_username }}' 20 | password: '{{ esxi_password }}' 21 | datastore: '{{ esxi_datastore }}' 22 | name: "{{ inventory_hostname }}" 23 | ovf: ../../template-vm/alt-server-p10.2-template.ova 24 | wait_for_ip_address: false 25 | networks: {"VM Network": "ansible"} 26 | delegate_to: localhost 27 | register: vminfo 28 | 29 | - name: Пауза 1 минута для дозагрузки виртуалок 30 | ansible.builtin.pause: 31 | minutes: 1 32 | 33 | - name: Удаление всех существующих адаптеров 34 | community.vmware.vmware_guest_network: 35 | validate_certs: false 36 | hostname: '{{ esxi_hostname }}' 37 | username: '{{ esxi_username }}' 38 | password: '{{ esxi_password }}' 39 | mac_address: "{{ vminfo.instance['hw_'+item].macaddress }}" 40 | name: "{{ inventory_hostname }}" 41 | state: absent 42 | delegate_to: localhost 43 | loop: '{{vminfo.instance.hw_interfaces}}' 44 | 45 | - name: Добавление интерфейса управления на VMs 46 | community.vmware.vmware_guest_network: 47 | validate_certs: false 48 | hostname: '{{ esxi_hostname }}' 49 | username: '{{ esxi_username }}' 50 | password: '{{ esxi_password }}' 51 | name: "{{ inventory_hostname }}" 52 | state: present 53 | network_name: "ansible" 54 | delegate_to: localhost 55 | register: interface_ansible_info 56 | 57 | - name: Копирование скрипта настройки интерфейса на виртуалки 58 | community.vmware.vmware_guest_file_operation: 59 | validate_certs: false 60 | hostname: '{{ esxi_hostname }}' 61 | username: '{{ esxi_username }}' 62 | password: '{{ esxi_password }}' 63 | 64 | vm_id: "{{ inventory_hostname }}" 65 | vm_username: "{{ vms_username }}" 66 | vm_password: "{{ vms_user_password }}" 67 | copy: 68 | src: "configure_interface_mgmt.sh" 69 | dest: "/home/student/configure_interface_mgmt.sh" 70 | overwrite: true 71 | delegate_to: localhost 72 | 73 | - name: Делаем скрип настройки интерфейса исполняемым файлом 74 | community.vmware.vmware_vm_shell: 75 | validate_certs: false 76 | hostname: '{{ esxi_hostname }}' 77 | username: '{{ esxi_username }}' 78 | password: '{{ esxi_password }}' 79 | 80 | vm_id: "{{ inventory_hostname }}" 81 | vm_username: "{{ vms_username }}" 82 | vm_password: "{{ vms_user_password }}" 83 | vm_shell: "/bin/chmod" 84 | vm_shell_args: "+x /home/student/configure_interface_mgmt.sh" 85 | wait_for_process: true 86 | delegate_to: localhost 87 | 88 | - name: Запуск скрипта настройки интерфейса для управления 89 | community.vmware.vmware_vm_shell: 90 | validate_certs: false 91 | hostname: '{{ esxi_hostname }}' 92 | username: '{{ esxi_username }}' 93 | password: '{{ esxi_password }}' 94 | 95 | vm_id: "{{ inventory_hostname }}" 96 | vm_username: "{{ vms_username }}" 97 | vm_password: "{{ vms_user_password }}" 98 | vm_shell: "/home/student/configure_interface_mgmt.sh" 99 | vm_shell_env: 100 | - "INTERFACE_MAC={{ interface_ansible_info.network_info[0].mac_address }}" 101 | - "IP_ADDRESS={{ ansible_ssh_host }}" 102 | - "IP_MASK=/24" 103 | wait_for_process: true 104 | delegate_to: localhost 105 | 106 | - name: Добавление интерфейсов на VMs 107 | community.vmware.vmware_guest_network: 108 | validate_certs: false 109 | hostname: '{{ esxi_hostname }}' 110 | username: '{{ esxi_username }}' 111 | password: '{{ esxi_password }}' 112 | name: "{{ inventory_hostname }}" 113 | state: present 114 | network_name: "{{ item.network_name }}" 115 | loop: "{{ vars.vars.interfaces }}" 116 | delegate_to: localhost 117 | register: vm_network_info 118 | 119 | - name: Настраиваем IP на физические интерфейсы 120 | when: item.network_name != 'ansible' 121 | community.vmware.vmware_vm_shell: 122 | validate_certs: false 123 | hostname: '{{ esxi_hostname }}' 124 | username: '{{ esxi_username }}' 125 | password: '{{ esxi_password }}' 126 | 127 | vm_id: "{{ inventory_hostname }}" 128 | vm_username: "{{ vms_username }}" 129 | vm_password: "{{ vms_user_password }}" 130 | vm_shell: "/home/student/configure_interface_mgmt.sh" 131 | vm_shell_env: 132 | - "INTERFACE_MAC={{ item.mac_address }}" 133 | - "IP_ADDRESS={{ vars.vars | community.general.json_query('interfaces[?network_name==`'+item.network_name+'`].ifaddr') | first }}" 134 | - "IP_MASK={{vars.vars | community.general.json_query('interfaces[?network_name==`'+item.network_name+'`].mask') | first}}" 135 | wait_for_process: true 136 | delegate_to: localhost 137 | loop: "{{ vm_network_info.results[-1].network_info }}" 138 | 139 | 140 | - name: Удаляем старые SSH ключи 141 | hosts: localhost 142 | tasks: 143 | - name: Удаляем известные SSH ключи 144 | ansible.builtin.file: 145 | path: /home/student/.ssh/known_hosts 146 | state: absent 147 | 148 | - name: Настраиваем SSH подключение к виртуальным машинам 149 | hosts: VMs 150 | gather_facts: no 151 | tasks: 152 | - name: Копирование скрипта 153 | community.vmware.vmware_guest_file_operation: 154 | validate_certs: false 155 | hostname: '{{ esxi_hostname }}' 156 | username: '{{ esxi_username }}' 157 | password: '{{ esxi_password }}' 158 | vm_id: "{{ inventory_hostname }}" 159 | vm_username: "{{ vms_username }}" 160 | vm_password: "{{ vms_user_password }}" 161 | copy: 162 | src: "configure_ssh_connect.sh" 163 | dest: "/home/student/configure_ssh_connect.sh" 164 | overwrite: true 165 | delegate_to: localhost 166 | 167 | - name: Делаем скрип исполняемым файлом 168 | community.vmware.vmware_vm_shell: 169 | validate_certs: false 170 | hostname: '{{ esxi_hostname }}' 171 | username: '{{ esxi_username }}' 172 | password: '{{ esxi_password }}' 173 | vm_id: "{{ inventory_hostname }}" 174 | vm_username: "{{ vms_username }}" 175 | vm_password: "{{ vms_user_password }}" 176 | vm_shell: "/bin/chmod" 177 | vm_shell_args: "+x /home/student/configure_ssh_connect.sh" 178 | wait_for_process: true 179 | delegate_to: localhost 180 | 181 | - name: Запуск скрипта настройки ssh на удаленном хосте 182 | community.vmware.vmware_vm_shell: 183 | validate_certs: false 184 | hostname: '{{ esxi_hostname }}' 185 | username: '{{ esxi_username }}' 186 | password: '{{ esxi_password }}' 187 | vm_id: "{{ inventory_hostname }}" 188 | vm_username: "{{ vms_username }}" 189 | vm_password: "{{ vms_user_password }}" 190 | vm_shell: "/home/student/configure_ssh_connect.sh" 191 | wait_for_process: true 192 | delegate_to: localhost 193 | 194 | 195 | - name: Проверка подключения к виртуалкам 196 | hosts: VMs 197 | gather_facts: yes 198 | tasks: 199 | - name: Проверка 200 | debug: 201 | msg: "{{ansible_ssh_host}}" 202 | ``` 203 | 204 | Теперь подробнее... 205 | 206 | 207 | ## Сценарий №1 - Разворачивание VMs и настройка доступа для управления через SSH 208 | 209 | Мы будем подключаться к `ESXi` и на нем выполнять сценарии для виртуалок, поэтому в `hosts` указываем переменную `VMs` из инвентарного файла. Чтобы `Ansible` не пытался подключиться к не существующим машинам и собрать о них информацию отключаем сбор фактов `gather_facts: no` 210 | 211 | 212 | ``` 213 | hosts: VMs 214 | gather_facts: no 215 | ``` 216 | 217 | ### Задача №1 - Разворачиваем VMs из шаблона 218 | 219 | ``` 220 | - name: Разворачиваем VMs из шаблона 221 | community.vmware.vmware_deploy_ovf: 222 | validate_certs: false 223 | hostname: '{{ esxi_hostname }}' 224 | username: '{{ esxi_username }}' 225 | password: '{{ esxi_password }}' 226 | datastore: '{{ esxi_datastore }}' 227 | name: "{{ inventory_hostname }}" 228 | ovf: ../../template-vm/alt-server-p10.2-template.ova 229 | wait_for_ip_address: false 230 | networks: {"VM Network": "ansible"} 231 | delegate_to: localhost 232 | register: vminfo 233 | ``` 234 | 235 | Подробнее про коллекцию [community.vmware.vmware_deploy_ovf](https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_deploy_ovf_module.html) 236 | 237 | `"{{ inventory_hostname }}"` - переменная Ansible, которая берется из название хоста в инвентарном файле 238 | 239 |

240 | 241 |

242 | 243 | `ovf: ../../template-vm/alt-server-p10.2-template.ova` - путь до файла с шаблоном виртуалки 244 | 245 |

246 | 247 |

248 | -------------------------------------------------------------------------------- /ansible/createStend/deployVMs/configure_interface_mgmt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | INTERFACE_NAME=`ip -o link | awk '$2 != "lo:" {print $2, $(NF-4)}' | awk -v mac=$INTERFACE_MAC '$2 == mac {print $1}'` 3 | INTERFACE_NAME=${INTERFACE_NAME//:/} 4 | 5 | # Проверяем существует ли папка для интерейса $INTERFACE_NAME 6 | if [ -d "/etc/net/ifaces/$INTERFACE_NAME" ] 7 | then 8 | # Удаляем всю папку, чтобы создать новую со своими параметрами 9 | rm -rf "/etc/net/ifaces/$INTERFACE_NAME" 10 | fi 11 | 12 | mkdir /etc/net/ifaces/$INTERFACE_NAME 13 | 14 | # Создаем файл /etc/net/ifaces/$INTERFACE_NAME/options 15 | echo "TYPE=eth 16 | DISABLED=no 17 | NM_CONTROLLED=no 18 | BOOTPROTO=static 19 | CONFIG_IPv4=yes" > /etc/net/ifaces/$INTERFACE_NAME/options 20 | 21 | # Настраиваем IP на интерфейс 22 | echo $IP_ADDRESS$IP_MASK > /etc/net/ifaces/$INTERFACE_NAME/ipv4address 23 | 24 | # Перезапускаем сеть 25 | systemctl restart network -------------------------------------------------------------------------------- /ansible/createStend/deployVMs/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/createStend/deployVMs/pic1.png -------------------------------------------------------------------------------- /ansible/createStend/deployVMs/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/createStend/deployVMs/pic2.png -------------------------------------------------------------------------------- /ansible/createStructireProject/README.md: -------------------------------------------------------------------------------- 1 | ### Создание модулей проекта 2 | 3 | Сейчас все наш сценарий хранится в одном файле. Со временем в файл вы будите добавлять новые задачи. Что затруднит ориентацию в этотм сценарии. Поэтому разделим весь сценарий на части 4 | 5 | Для этого в корневой папке вашего проекта создадим папку `tasks` 6 | 7 | В этой папке создадим следующие файлы: 8 | 9 | ``` 10 | setHostname.yaml 11 | enableRouting.yaml 12 | setIpAddress.yaml 13 | setDefaultGateway.yaml 14 | restartNetwork.yaml 15 | ``` 16 | 17 | Теперь наполним созданные файлы следующим содержимом 18 | 19 | `setHostname.yaml` 20 | 21 | ``` 22 | --- 23 | 24 | - name: Set hostname 25 | ansible.builtin.hostname: 26 | name: "{{ inventory_hostname }}" 27 | ``` 28 | 29 | `enableRouting.yaml` 30 | 31 | ``` 32 | --- 33 | 34 | - name: Enable routing 35 | shell: 36 | cmd: "sed -i -e 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/net/sysctl.conf" 37 | 38 | ``` 39 | 40 | `setIpAddress.yaml` 41 | 42 | ``` 43 | --- 44 | 45 | - name: Creating a folder for interfaces 46 | ansible.builtin.file: 47 | path: "/etc/net/ifaces/{{ item['ifname'] }}" 48 | state: directory 49 | mode: '0777' 50 | loop: "{{ vars.vars.interfaces }}" 51 | - name: Creating a file with IP address 52 | ansible.builtin.copy: 53 | dest: "/etc/net/ifaces/{{ item['ifname'] }}/ipv4address" 54 | content: "{{ item['ifaddr']+item['mask'] }}" 55 | mode: '0777' 56 | loop: "{{ vars.vars.interfaces }}" 57 | - name: Creating a file options for interfaces 58 | ansible.builtin.copy: 59 | dest: "/etc/net/ifaces/{{ item['ifname'] }}/options" 60 | content: "TYPE=eth 61 | DISABLE=no 62 | NM_CONTROLLED=no 63 | BOOTPROTO=static 64 | CONFIG_IPV4=yes" 65 | mode: '0777' 66 | loop: "{{ vars.vars.interfaces }}" 67 | ``` 68 | 69 | `setDefaultGateway.yaml` 70 | 71 | ``` 72 | --- 73 | 74 | - name: Setting default gateway on Servers 75 | when: item['gw'] is defined 76 | ansible.builtin.copy: 77 | dest: "/etc/net/ifaces/{{ item['ifname'] }}/ipv4route" 78 | content: "default via {{ item['gw'] }}" 79 | mode: '0777' 80 | loop: "{{ vars.vars.interfaces }}" 81 | ``` 82 | 83 | `restartNetwork.yaml` 84 | 85 | ``` 86 | --- 87 | 88 | - name: Restart network 89 | ansible.builtin.systemd: 90 | name: network 91 | state: restarted 92 | ``` 93 | 94 | ## Теперь объединим все эти задачи в один `playbook` 95 | 96 | в папке `/playbook` создадим файл `initSettings.yaml` 97 | 98 | ``` 99 | --- 100 | 101 | - name: Init settings 102 | hosts: VMs 103 | tasks: 104 | - include_tasks: tasks/setHostname.yaml 105 | - include_tasks: tasks/enableRouting.yaml 106 | - include_tasks: tasks/setIpAddress.yaml 107 | - include_tasks: tasks/setDefaultGateway.yaml 108 | - include_tasks: tasks/restartNetwork.yaml 109 | ``` 110 | 111 | тем самым мы сделали такой же сценарий, но теперь проще его воспринимать и масштабировать -------------------------------------------------------------------------------- /ansible/createTunnelInterfaces/README.md: -------------------------------------------------------------------------------- 1 | ### Настрока шлюза по умолчанию и туннельных интерфейсов 2 | 3 | ``` 4 | --- 5 | 6 | - name: Настраиваем DG для виртуальных машин 7 | hosts: VMs 8 | tasks: 9 | - name: Устанавливаем default_interface 10 | when: 11 | - ansible_facts[item].ipv4.address is defined 12 | - vars.vars.interfaces | selectattr('gw','defined') 13 | - vars.vars.interfaces | selectattr('gw','defined') | map(attribute='ifaddr') | first == ansible_facts[item].ipv4.address 14 | ansible.builtin.set_fact: 15 | default_interface: "{{ item }}" 16 | default_ip: "{{vars.vars.interfaces | selectattr('gw','defined') | map(attribute='gw') | first}}" 17 | loop: "{{ ansible_facts.interfaces }}" 18 | 19 | - name: Настраиваем шлюз для устройств 20 | when: default_interface is defined 21 | ansible.builtin.copy: 22 | dest: "/etc/net/ifaces/{{ default_interface }}/ipv4route" 23 | content: "default via {{ default_ip }}" 24 | mode: '0777' 25 | 26 | - name: Включаем маршрутизацию 27 | shell: 28 | cmd: "sed -i -e 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/net/sysctl.conf" 29 | 30 | - name: Перезагружаем сеть 31 | ansible.builtin.systemd: 32 | name: network 33 | state: restarted 34 | 35 | - name: Настраиваем Tunnel для виртуальных машин 36 | hosts: VMs 37 | tasks: 38 | - name: Creating a folder for interfaces 39 | when: vars.vars.tunnels is defined 40 | ansible.builtin.file: 41 | path: "/etc/net/ifaces/{{ item['ifname'] }}" 42 | state: directory 43 | mode: '0777' 44 | loop: "{{ vars.vars.tunnels }}" 45 | 46 | - name: Creating a file with IP address 47 | when: vars.vars.tunnels is defined 48 | ansible.builtin.copy: 49 | dest: "/etc/net/ifaces/{{ item['ifname'] }}/ipv4address" 50 | content: "{{ item['ifaddr']+item['mask'] }}" 51 | mode: '0777' 52 | loop: "{{ vars.vars.tunnels }}" 53 | 54 | - name: Creating a file options for tunnel interfaces 55 | when: vars.vars.tunnels is defined 56 | ansible.builtin.copy: 57 | dest: "/etc/net/ifaces/{{ item['ifname'] }}/options" 58 | content: "TYPE=iptun 59 | TUNTYPE=gre 60 | TUNLOCAL={{ item['tunlocal'] }} 61 | TUNREMOTE={{ item['tunremote'] }} 62 | TUNOPTIONS='ttl 64' 63 | HOST={{ default_interface }}" 64 | mode: '0777' 65 | loop: "{{ vars.vars.tunnels }}" 66 | 67 | - name: Перезагружаем сеть 68 | ansible.builtin.systemd: 69 | name: network 70 | state: restarted 71 | ``` -------------------------------------------------------------------------------- /ansible/init/connectVSCodeToAnsible/README.md: -------------------------------------------------------------------------------- 1 | # Подключение VSCode по SSH к серверу 2 | 3 | Проверяем что в `VSCode` установленно расширение `Remote explorer` 4 | 5 | Если нет расширения, то устанавливаем 6 | 7 |

8 | 9 |

10 | 11 | Жмакаем на плюсик и добавляем свою виртуалку в список SSH подключений 12 | 13 |

14 | 15 |

16 | 17 |

18 | 19 |

20 | 21 | Обнавляем список подключений 22 | 23 |

24 | 25 |

26 | 27 | Добавляем папку которая находится на удаленном устройстве 28 | 29 |

30 | 31 |

32 | 33 |

34 | 35 |

36 | 37 | Ждем, когда на виртуалку установится VSCode 38 | 39 | Открываем папку `ansible`, если папки не существует, то создаем ее 40 | 41 |

42 | 43 |

-------------------------------------------------------------------------------- /ansible/init/connectVSCodeToAnsible/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/connectVSCodeToAnsible/pic1.png -------------------------------------------------------------------------------- /ansible/init/connectVSCodeToAnsible/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/connectVSCodeToAnsible/pic2.png -------------------------------------------------------------------------------- /ansible/init/connectVSCodeToAnsible/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/connectVSCodeToAnsible/pic3.png -------------------------------------------------------------------------------- /ansible/init/connectVSCodeToAnsible/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/connectVSCodeToAnsible/pic4.png -------------------------------------------------------------------------------- /ansible/init/connectVSCodeToAnsible/pic5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/connectVSCodeToAnsible/pic5.png -------------------------------------------------------------------------------- /ansible/init/connectVSCodeToAnsible/pic6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/connectVSCodeToAnsible/pic6.png -------------------------------------------------------------------------------- /ansible/init/connectVSCodeToAnsible/pic7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/connectVSCodeToAnsible/pic7.png -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/README.md: -------------------------------------------------------------------------------- 1 | # Подготовка шаблона виртуальной машины для сборки стенда 2 | 3 | Нам нужно создать образ OVA с минимальным набором пакетов. Этот шаблон будет использоваться для всех виртуальных машин. 4 | 5 | Открываем ваш `ESXi` и в нем проводим стандартную установку виртуальной машины с минимальным набором пакетов. 6 | 7 | Рекомендую в параметрах виртуальной машины сделать 4 ядра для CPU и 4Гб оперативной памяти. 8 | 9 | Желательно обновить операционку до последней версии. В `ALT Linux` это делается вот так. 10 | 11 | ``` 12 | apt-get update && apt-get dist-upgrade && update-kernel 13 | ``` 14 | 15 | Обязательно установить `open-vm-tools-desktop` и `sshpass` 16 | 17 | ``` 18 | apt-get install open-vm-tools-desktop 19 | apt-get install sshpass 20 | ``` 21 | 22 | При желание вы можете предварительно поставить все пакеты, которые вы будите использовать в этом задание. 23 | 24 | Если не установите. Ничего страшного. Установим их в дальнейшем. 25 | 26 | ## Экспорт виртуальной машыны в OVA формат 27 | 28 | На понадобится следующая утилита: 29 | [Open Virtualization Format Tool (ovftool) 30 | ](./ovftool.zip) 31 | 32 | Скачиваем архив и распаковываем. 33 | 34 | Открываем `cmd` с правами администратора и переходим в папку `ovftool`, которую извлекли из архива. У меня она лежит на диске `C:\` 35 | 36 | Теперь вводим комманду такого формата 37 | 38 | `ovftool.exe ` 39 | 40 | У меня эта команда будет выгдалять вот так: 41 | 42 | ``` 43 | ovftool.exe vi://10.12.66.1/ALTTemplate C:\VMTemplate\alt-server-p10.2-template.ova 44 | ``` 45 | где: 46 | 47 | `10.12.66.1` - ip моего ESXi 48 | 49 | `ALTTemplate` - имя виртуальной машины 50 | 51 | `C:\VMTemplate\alt-server-p10.2-template.ova` - путь на моем компьютере куда скачать шаблон 52 | 53 |

54 | 55 |

56 | 57 | Теперь давйте протестируем наш шаблон. Если ли какие-то ошибки при его разворачивание на `ESXi`. 58 | 59 | Для этого переходим на ваш `ESXi` и пункт `Create / Register VM`. 60 | 61 | В окне выбираем пункт `Deploy a virtual machine from an OVF or OVA file` 62 | 63 |

64 | 65 |

66 | 67 |

68 | 69 |

70 | 71 |

72 | 73 |

74 | 75 |

76 | 77 |

78 | 79 |

80 | 81 |

82 | 83 | Дождитесь завершения процесса. 84 | 85 |

86 | 87 |

88 | 89 | Запустите созданную виртуальную машину. Убедитесь, что она запускается. 90 | 91 | После этого ее можно удалить. 92 | 93 | ## Копирование шаблона виртуальной машины на машину с Ansible 94 | 95 | Откройте `VSCode` и подключитесь через него в виртуальной машине с установленным `Ansible` 96 | 97 | Создайте отделную папку `template-vm` 98 | 99 |

100 | 101 |

102 | 103 | Теперь мышкой просто перетащите файл с шаблоном виртуальной машины в папку `template-vm` 104 | 105 |

106 | 107 |

108 | 109 | Дождитесь, когда процесс копирования завершится 110 | 111 |

112 | 113 |

114 | 115 | Желательно переименовать шаблон так, чтобы небыло пробелов. 116 | Например вот так: 117 | 118 | `alt-server-p10.2-template.ova` -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/ovftool.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/ovftool.zip -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/pic1.png -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/pic10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/pic10.png -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/pic2.png -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/pic3.png -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/pic4.png -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/pic5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/pic5.png -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/pic6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/pic6.png -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/pic7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/pic7.png -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/pic8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/pic8.png -------------------------------------------------------------------------------- /ansible/init/createVMsTemplate/pic9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVMsTemplate/pic9.png -------------------------------------------------------------------------------- /ansible/init/createVirtualEnv/README.md: -------------------------------------------------------------------------------- 1 | # Создание виртуального окружения Python 2 | 3 | В домашнем каталоге пользователя создаем папку `ansible` 4 | У меня пользователь `student` 5 | 6 | ``` 7 | mkdir /home/student/ansible 8 | cd /home/student/ansible 9 | ``` 10 | 11 | Создаем виртуальное окружение 12 | 13 | ``` 14 | python3.12 -m venv .env 15 | ``` 16 | 17 | Пробуем активироваль его 18 | 19 | ``` 20 | source .env/bin/activate 21 | ``` 22 | 23 | Должно получиться так 24 |

25 | 26 |

-------------------------------------------------------------------------------- /ansible/init/createVirtualEnv/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/createVirtualEnv/pic1.png -------------------------------------------------------------------------------- /ansible/init/initSettings/README.md: -------------------------------------------------------------------------------- 1 | ### Начальная настройка ansible 2 | 3 | В папке с витуальным окружением создайте файл `ansible.cfg` со следующим содержимом 4 | 5 | ``` 6 | [defaults] 7 | 8 | inventory = ./hosts.yaml 9 | ask_pass = False 10 | host_key_checking = False 11 | ``` 12 | 13 | 14 | 15 | В той же папке создайте файл `hosts.yaml` и добавьте в него свой ESXi сервер и виртуальные машины 16 | 17 | ``` 18 | all: 19 | vars: 20 | esxi_hostname: "10.12.66.1" 21 | esxi_username: "root" 22 | esxi_password: "P@ssw0rd" 23 | esxi_datastore: "Data_str" 24 | vms_username: "root" 25 | vms_user_password: "P@ssw0rd" 26 | VMs: 27 | hosts: 28 | ISP: 29 | ansible_ssh_host: 10.15.15.2 30 | vars: 31 | routing: true 32 | interfaces: [ 33 | { type: 'eth', ifaddr: '1.1.1.1', mask: '/30', network_name: 'ansible_net10'}, 34 | { type: 'eth', ifaddr: '2.2.2.1', mask: '/30', network_name: 'ansible_net20'}, 35 | { type: 'eth', ifaddr: '94.41.92.1', mask: '/24', network_name: 'ansible_net50'}, 36 | ] 37 | internet: { type: 'eth', ifaddr: '10.12.66.2', mask: '/24', gw: '10.12.66.254', network_name: "VM_network" } 38 | HQ-R: 39 | ansible_ssh_host: 10.15.15.3 40 | vars: 41 | routing: true 42 | interfaces: [ 43 | { type: 'eth', ifaddr: '192.168.0.1', mask: '/25', network_name: 'ansible_net30'}, 44 | { type: 'eth', ifaddr: '1.1.1.2', mask: '/30', network_name: 'ansible_net10', gw: '1.1.1.1'}, 45 | ] 46 | tunnels: [ 47 | { type: 'iptun', ifname: 'tunnel1', ifaddr: '172.16.0.1', mask: '/30', tunlocal: '1.1.1.2', tunremote: '2.2.2.2', interface: 'ens224', ospf: true } 48 | ] 49 | pkg: [ 'frr', iperf3 ] 50 | BR-R: 51 | ansible_ssh_host: 10.15.15.4 52 | vars: 53 | routing: true 54 | interfaces: [ 55 | { type: 'eth', ifaddr: '2.2.2.2', mask: '/30', network_name: 'ansible_net20', gw: '2.2.2.1'}, 56 | { type: 'eth', ifaddr: '192.168.0.129', mask: '/27', network_name: 'ansible_net40'}, 57 | ] 58 | tunnels: [ 59 | { type: 'iptun', ifname: 'tunnel1', ifaddr: '172.16.0.2', mask: '/30', tunlocal: '2.2.2.2', tunremote: '1.1.1.2', interface: 'ens192', ospf: true} 60 | ] 61 | pkg: [ 'frr', iperf3 ] 62 | HQ-SRV: 63 | ansible_ssh_host: 10.15.15.5 64 | vars: 65 | interfaces: [ 66 | { type: 'eth', ifaddr: '192.168.0.2', mask: '/25', network_name: 'ansible_net30', gw: '192.168.0.1'} 67 | ] 68 | BR-SRV: 69 | ansible_ssh_host: 10.15.15.6 70 | vars: 71 | interfaces: [ 72 | { type: 'eth', ifaddr: '192.168.0.130', mask: '/27', network_name: 'ansible_net40', gw: '192.168.0.129'} 73 | ] 74 | vars: 75 | ansible_connection: ssh 76 | ansible_user: root 77 | ansible_password: P@ssw0rd 78 | esxis: 79 | hosts: 80 | esxi: 81 | ansible_ssh_host: 10.12.66.1 82 | vars: 83 | vswitchs: [ 84 | { 85 | name: "INNER_ANSIBLE", 86 | port_groups: [ 87 | { name: 'ansible_net10', vlan: '10' }, 88 | { name: 'ansible_net20', vlan: '20' }, 89 | { name: 'ansible_net30', vlan: '30' }, 90 | { name: 'ansible_net40', vlan: '40' }, 91 | { name: 'ansible_net50', vlan: '50' }, 92 | ], 93 | } 94 | ] 95 | vars: 96 | ansible_connection: ssh 97 | ansible_user: root 98 | ansible_password: P@ssw0rd 99 | 100 | localhost: 101 | hosts: 102 | localhost: 103 | ansible_connection: local 104 | 105 | ``` 106 | 107 | Давате разберем этот конфиг по частям, чтобы узнать что за что отвечает. 108 | 109 | ### Раздел all: 110 | ``` 111 | all: 112 | vars: 113 | esxi_hostname: "10.12.66.1" 114 | esxi_username: "root" 115 | esxi_password: "P@ssw0rd" 116 | esxi_datastore: "Data_str" 117 | vms_username: "root" 118 | vms_user_password: "P@ssw0rd" 119 | ``` 120 | 121 | Это общие переменные, которые понадобятся для всех устройств. 122 | 123 | `esxi_hostname: "10.12.66.1"` - IP вашего сервера ESXi, где будут распологаться виртуальные машины 124 | 125 | `esxi_username: "root"` - имя пользователя для сервера ESXi 126 | 127 | `esxi_password: "P@ssw0rd"` - пароль для пользователя ESXi 128 | 129 | `esxi_datastore: "Data_str"` - имя диска, на котором будут размещаться виртуалки. Посмотреть можно в Storage -> Datastores на хосте ESXi 130 | 131 | `vms_username: "root"` - пользователь под которым будут администрироваться виртуалки 132 | 133 | `vms_user_password: "P@ssw0rd"` - пароль пользователя под которым будут администрироваться виртуалки. Задается в настройках самой ОС на виртуальной машине 134 | 135 | Параметры `vms_username:` `vms_user_password:` используются для подключения к виртуальной машине через ESXi, даже при условие, что ANSIBLE не имеет связи с виртуалкой и нет ни одного сетевого интерфейса на виртуальной машине. Этот способ не совсем удобен, потому что не позволяет получить результат выполнения команд и отсутствие `иденпотентности` (страшное и смешное слово, которе вы пока не знаете). Его будем использовать для начальной конфигурации виртуалок. 136 | 137 | ### Раздел VMs: 138 | 139 | Разберем на примере ISP 140 | 141 | ``` 142 | VMs: 143 | hosts: 144 | ISP: 145 | ansible_ssh_host: 10.15.15.2 146 | vars: 147 | routing: true 148 | interfaces: [ 149 | { type: 'eth', ifaddr: '1.1.1.1', mask: '/30', network_name: 'ansible_net10'}, 150 | { type: 'eth', ifaddr: '2.2.2.1', mask: '/30', network_name: 'ansible_net20'}, 151 | { type: 'eth', ifaddr: '94.41.92.1', mask: '/24', network_name: 'ansible_net50'}, 152 | ] 153 | internet: { type: 'eth', ifaddr: '10.12.66.2', mask: '/24', gw: '10.12.66.254', network_name: "VM_network" } 154 | ... 155 | vars: 156 | ansible_connection: ssh 157 | ansible_user: root 158 | ansible_password: P@ssw0rd 159 | ``` 160 | 161 | `hosts` - Здесь хранятся настройки виртуальных машин 162 | 163 | `vars` - Здесь хранятся настройки для подключения ANSIBLE к виртуальным машинам 164 | 165 | В разделе `hosts` перечислены названия виртуальных машин. Например вот так. 166 | 167 | ``` 168 | hosts: 169 | ISP: 170 | HQ-SRV: 171 | HQ-R: 172 | BR-R: 173 | BR-SRV: 174 | ``` 175 | 176 | В каждой виртуальной машине создадим еще две переменные. Например вот так. 177 | 178 | ``` 179 | hosts: 180 | ISP: 181 | ansible_ssh_host: 10.15.15.2 182 | vars: 183 | ``` 184 | 185 | `ansible_ssh_host: 10.15.15.2` - переменная для подключения к виртуальной машине по SSH. Для этого на виртуалках создадим дополнительный интерфейс. 186 | 187 | `vars` - переменная в которую можем накидывать любые другие параметры, которые будем использовать конкретно для этой виртуалки. 188 | 189 | Например вот так 190 | 191 | ``` 192 | vars: 193 | interfaces: [ 194 | { type: 'eth', ifaddr: '1.1.1.1', mask: '/30', network_name: 'ansible_net10'}, 195 | { type: 'eth', ifaddr: '2.2.2.1', mask: '/30', network_name: 'ansible_net20'}, 196 | { type: 'eth', ifaddr: '94.41.92.1', mask: '/24', network_name: 'ansible_net50'}, 197 | ] 198 | internet: { type: 'eth', ifaddr: '10.12.66.2', mask: '/24', gw: '10.12.66.254', network_name: "VM_network" } 199 | ``` 200 | 201 | ### Разберем раздел `interfaces` 202 | 203 | Это список интерфейсов. Каждый элемент этого списка это словарь c параметрами одного интерфейса 204 | 205 | ``` 206 | { type: 'eth', ifaddr: '1.1.1.1', mask: '/30', network_name: 'ansible_net10'} 207 | ``` 208 | 209 | `type` - тип интерфейса 210 | 211 | `ifaddr` - ip который будем назначать на интерфейс 212 | 213 | `mask` - маска для ip адреса 214 | 215 | `network_name` - порт-группа в `ESXi` к которой будет подключен интерфейс. Важно чтобы это название было таким же как параметры `port_groups` в разделе `esxi` или названия порт-групп, которые вы создадите вручную на сервере `ESXi` 216 | 217 | 218 | ### Раздел tunnels 219 | 220 | На некоторых виртуалках будут туннели. Создадим для них отдельную переменную в разделе `vars` конкретной виртуальной машины 221 | 222 | ``` 223 | tunnels: [ 224 | { type: 'iptun', ifname: 'tunnel1', ifaddr: '172.16.0.2', mask: '/30', tunlocal: '2.2.2.2', tunremote: '1.1.1.2', interface: 'ens192', ospf: true} 225 | ] 226 | ``` 227 | 228 | Структура похожа на обычные интерфейсы, за исключением того, что добавилиь IP начала и конца туннеля. Обратите внимание, что на разных виртуалках они будут отличаться. 229 | 230 | 231 | ### Раздел ESXis 232 | 233 | ``` 234 | esxis: 235 | hosts: 236 | esxi: 237 | ansible_ssh_host: 10.12.66.1 238 | vars: 239 | vswitchs: [ 240 | { 241 | name: "INNER_ANSIBLE", 242 | port_groups: [ 243 | { name: 'ansible_net10', vlan: '10' }, 244 | { name: 'ansible_net20', vlan: '20' }, 245 | { name: 'ansible_net30', vlan: '30' }, 246 | { name: 'ansible_net40', vlan: '40' }, 247 | { name: 'ansible_net50', vlan: '50' }, 248 | ], 249 | } 250 | ] 251 | vars: 252 | ansible_connection: ssh 253 | ansible_user: root 254 | ansible_password: P@ssw0rd 255 | ``` 256 | 257 | `vswitchs:` - Список виртуальных свичей, которые будем создавать. Для данной работы одного будет достаточно 258 | 259 | `name` - имя добавляемго виртуального свича 260 | 261 | `port_groups` - список порт-групп, которые создаем на новом виртуальном свиче. Важно, чтобы названия совпадали с названиями `network_name` в параметрах виртуальных машин -------------------------------------------------------------------------------- /ansible/init/initVMs/README.md: -------------------------------------------------------------------------------- 1 | ### Подготовка виртуальных машин к управлению через SSH 2 | 3 | На всех виртуальных машинах нужно установить `open-vm-tools-desktop` и `sshpass` 4 | 5 | ``` 6 | apt-get install open-vm-tools-desktop 7 | apt-get install sshpass 8 | ``` 9 | 10 | На вашем `ESXi` хосте создайте дополнительну `portgroup` с названием `ansible` 11 | 12 |

13 | 14 |

15 | 16 | На виртуальных машинах добавьте еще один интерфейс и подключите его в созданой `portgroup` 17 | 18 |

19 | 20 |

21 | 22 | Задайте IP созданным интерфейсам из не существующей подсети. Например из `10.15.15.0/24` 23 | 24 | Настройте возможность подключения по `ssh` к виртуальным машинам под пользователем `root` 25 | 26 | Для этого нужно отредактировать файл `/etc/openssh/sshd_config` 27 | 28 | Заменяем `#PermitRootLogin without_password` на `PermitRootLogin yes` 29 | 30 | ``` 31 | sed -i -e 's/#PermitRootLogin without_password/PermitRootLogin yes/g' /etc/openssh/sshd_config 32 | ``` 33 | 34 | Перезагружаем ssh 35 | 36 | ``` 37 | /etc/init.d/sshd restart 38 | ``` 39 | 40 | Теперь проверяем что с виртуальной машины `ansible` можем подключиться ко всем другим вируальным машинам 41 | `ssh root@IP виртуальной машины` 42 | 43 | например: 44 | ``` 45 | ssh root@10.15.15.2 46 | ``` -------------------------------------------------------------------------------- /ansible/init/initVMs/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/initVMs/pic1.png -------------------------------------------------------------------------------- /ansible/init/initVMs/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/initVMs/pic2.png -------------------------------------------------------------------------------- /ansible/init/installAnsible/README.md: -------------------------------------------------------------------------------- 1 | # Установка ansible 2 | 3 | В `VSCode` откройте терминал. 4 | Проверьте что вы находитесь в папке `ansible` и у вас активированно виртуальное оркужение 5 | 6 |

7 | 8 |

9 | 10 | `Ansible` это пакет `python`. Пакет можно установить при помощи утилиты командной строки `pip` 11 | 12 | ``` 13 | pip install ansible 14 | ``` -------------------------------------------------------------------------------- /ansible/init/installAnsible/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/installAnsible/pic1.png -------------------------------------------------------------------------------- /ansible/init/installPython3.12/README.md: -------------------------------------------------------------------------------- 1 | # Установка Python 3.12 на ALT Linux 2 | 3 | Для начала установите отдельную виртуальную машину на свой стенд и подключите ее к интернету 4 | 5 | Теперь проверим установлена ли утилита для скачивания файлов из интернета 6 | 7 | ``` 8 | wget 9 | ``` 10 | 11 | Если выдало вот такое: 12 | 13 | ``` 14 | -bash: wget: команда не найдена 15 | ``` 16 | 17 | Значит нужно установить wget 18 | 19 | ``` 20 | apt-get install wget 21 | ``` 22 | 23 | После установки wget переходим в папку `/tmp/` 24 | И скачиваем файл с сайта https://www.python.org/ 25 | 26 | ``` 27 | cd /tmp/ 28 | wget https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz 29 | ``` 30 | 31 |

32 | 33 |

34 | 35 | Разархивируем полученный файл 36 | 37 | ``` 38 | tar zxvf Python-3.12.1.tgz 39 | ``` 40 | 41 | Скопируем разархивированную папку 42 | 43 | ``` 44 | cp -r Python-3.12.1 /usr/local/bin 45 | cd /usr/local/bin/Python-3.12.1/ 46 | ``` 47 | 48 | Установим пакеты для компиляции 49 | 50 | ``` 51 | apt-get install zlib-devel libssl-devel libsqlite3-devel libffi-devel gcc 52 | apt-get install pip 53 | ``` 54 | 55 | Добавим немного параметров для компиляции 56 | 57 | ``` 58 | ./configure --prefix=/usr/local --with-ensurepip=install 59 | ``` 60 | 61 | Начинаем компилировать 62 | 63 | ``` 64 | make 65 | make install 66 | ``` 67 | 68 | Теперь почистим за собой весь мусор 69 | 70 | ``` 71 | make clean 72 | cd / 73 | rm -rf /usr/local/bin/Python-3.12.1 74 | ``` 75 | 76 | Проверяем, что Python3.12 установился 77 | 78 | ``` 79 | python3.12 80 | ``` 81 | 82 |

83 | 84 |

-------------------------------------------------------------------------------- /ansible/init/installPython3.12/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/installPython3.12/pic1.png -------------------------------------------------------------------------------- /ansible/init/installPython3.12/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/ansible/init/installPython3.12/pic2.png -------------------------------------------------------------------------------- /ansible/mount-local-repo/README.md: -------------------------------------------------------------------------------- 1 | # Монтируем локальный репозиторий на DVD диске 2 | 3 | 4 | Законченный `play-book`: 5 | ``` 6 | --- 7 | 8 | - name: Подключаем репозиторой на DVD диске. 9 | hosts: VMs 10 | gather_facts: no 11 | tasks: 12 | - name: Выключаем виртуальные машины 13 | community.vmware.vmware_guest: 14 | validate_certs: false 15 | hostname: '{{ esxi_hostname }}' 16 | username: '{{ esxi_username }}' 17 | password: '{{ esxi_password }}' 18 | name: "{{ inventory_hostname }}" 19 | state: poweredoff 20 | delegate_to: localhost 21 | 22 | - name: Подключаем DVD с репозиторием 23 | community.vmware.vmware_guest: 24 | validate_certs: false 25 | hostname: '{{ esxi_hostname }}' 26 | username: '{{ esxi_username }}' 27 | password: '{{ esxi_password }}' 28 | name: "{{ inventory_hostname }}" 29 | cdrom: 30 | - controller_number: 0 31 | unit_number: 0 32 | state: present 33 | type: iso 34 | iso_path: "[{{ esxi_datastore }}] ALT Linux 10.1 repo.iso" 35 | delegate_to: localhost 36 | 37 | - name: Включаем виртуальные машины 38 | community.vmware.vmware_guest: 39 | validate_certs: false 40 | hostname: '{{ esxi_hostname }}' 41 | username: '{{ esxi_username }}' 42 | password: '{{ esxi_password }}' 43 | name: "{{ inventory_hostname }}" 44 | state: poweredon 45 | delegate_to: localhost 46 | 47 | - name: Пауза 20 секунд для дозагрузки виртуалок 48 | ansible.builtin.pause: 49 | seconds: 20 50 | 51 | - name: Меняем репозиторий на DVD диск 52 | shell: | 53 | rm /etc/apt/sources.list.d/alt.list 54 | apt-repo add 'rpm-dir file:/mnt x86-64 classic' 55 | 56 | - name: Монтируем DVD диск с репозиторием в директорию /mnt/x86-64/ 57 | shell: | 58 | umount -a 59 | mkdir -p /mnt/x86-64/ 60 | mount /dev/sr0 /mnt/x86-64/ 61 | apt-get update 62 | ``` -------------------------------------------------------------------------------- /задание/README.md: -------------------------------------------------------------------------------- 1 | # Образец задания для демонстрационного экзамена по комплекту оценочной документации. 2 | Предисловие: 3 | 4 | Администрирование сетей и систем является одной из ключевых задач при создании и поддержке информационной инфраструктуры организации. Качественная настройка и управление сетевыми компонентами, серверами и сервисами играет важную роль в обеспечении стабильной и безопасной работы всей системы. 5 | 6 | Данное задание представляет собой комплексную программу по администрированию, которая включает в себя несколько модулей. Каждый модуль охватывает различные аспекты настройки и поддержки системы, начиная с базовой конфигурации устройств и заканчивая реализацией сложных сервисов и технологий. 7 | 8 | Модуль А посвящен базовой настройке устройств, включая присвоение имен, расчет IP-адресации и настройку внутренней динамической маршрутизации. Эти шаги позволяют создать основу для дальнейшего развития и масштабирования сети. 9 | 10 | Модуль Б фокусируется на настройке DNS-сервера, синхронизации времени между устройствами, реализации файлового SMB(NFS)-сервера и других сервисов, таких как мониторинг и центр сертификации. Все эти шаги направлены на обеспечение безопасности, доступности и функциональности системы. 11 | 12 | Модуль В включает в себя настройку защищенного туннеля между офисами, управление трафиком и конфигурирование вебсервера. Эти меры способствуют обеспечению безопасности коммуникаций, контролю трафика и предоставлению доступа к веб-приложениям. 13 | 14 | Цель данного задания состоит в том, чтобы разработать и настроить комплексную систему, которая удовлетворяет требованиям безопасности, функциональности и производительности. Работа в рамках этого задания требует глубоких знаний и навыков в области администрирования сетей и ПА, ГИА/ДЭ БУ, ГИА/ДЭ ПУ29 систем, а также умения применять современные технологии и методы для достижения поставленных целей. 15 | 16 | Учтите, что в некоторых заданиях необходимо составить отчёт о проделанной работе в электронном виде. 17 | -------------------------------------------------------------------------------- /задание/topology.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/задание/topology.png -------------------------------------------------------------------------------- /задание/Модуль 1 - Задание №1.md: -------------------------------------------------------------------------------- 1 | # Модуль 1 - Задание №1 2 | 3 | ![Топология](./topology.png) 4 | 1. Выполните базовую настройку всех устройств: 5 | * Присвоить имена в соответствии с топологией 6 | * Рассчитайте IP-адресацию IPv4. Необходимо заполнить таблицу №1, чтобы эксперты могли проверить ваше рабочее место. 7 | * Пул адресов для сети офиса `BRANCH` - не более 16 8 | * Пул адресов для сети офиса `HQ` - не более 64 9 | 10 | | HOSTNAME | INTERFACE | IP | MASK | DG | 11 | | ------------- | ------------- | ---------- | ---------- | ----------| 12 | | CLI | 13 | | ISP | 14 | | HQ-R | 15 | | HQ-SRV | 16 | | BR-R | 17 | | BR-SRV | 18 | 19 | 20 | 2. Настройте внутреннюю динамическую маршрутизацию по средствам FRR. Выберите и обоснуйте выбор протокола динамической маршрутизации из расчёта, что в дальнейшем сеть будет масштабироваться. 21 | - Составьте топологию сети `L3` 22 | 23 | 3. Настройте автоматическое распределение IP-адресов на роутере `HQ-R`. 24 | - Учтите, что у сервера должен быть зарезервирован адрес 25 | 26 | 4. Настройте локальные учётные записи на всех устройствах в соответствии с таблицей 2. 27 | 28 | | Учетная запись | Пароль | Устройство | 29 | | -------------- | ------ | ---------- | 30 | | admin | P@ssw0rd | CLI, HQ-SRV, HQ-R | 31 | | branch_admin | P@ssw0rd | BR-SRV BR-R | 32 | | network_admin | P@ssw0rd | HQ-R BR-R BR-SRV | 33 | 34 | 5. Измерьте пропускную способность сети между двумя узлами `HQ-R-ISP` по средствам утилиты `iperf3`. Предоставьте описание пропускной способности канала со скриншотами 35 | 36 | 6. Составьте `backup` скрипты для сохранения конфигурации сетевых устройств, а именно `HQ-R BR-R`. Продемонстрируйте их работу. 37 | 38 | 7. Настройте подключение по `SSH` для удалённого конфигурирования устройства HQ-SRV по порту 2222. Учтите, что вам необходимо перенаправить трафик на этот порт по средствам контролирования трафика. 39 | 40 | 8. Настройте контроль доступа до `HQ-SRV` по `SSH` со всех устройств, кроме `CLI`. -------------------------------------------------------------------------------- /решение/Модуль 1/README.md: -------------------------------------------------------------------------------- 1 | # Модуль 1 2 | 3 | [Задание](../../задание/Модуль%201%20-%20Задание%20№1.md) 4 | 5 | Решение сделанно на системе виртуализации ESXi 8.0 6 |

7 | 8 |

9 | 10 | 0. Сборка стенда 11 | - 0.1 Создание виртуальных подключений [->](./createStend/createVirtualConnect/README.md) 12 | - 0.2 Создание виртуальной машины [->](./createStend/createVirtualMashin/README.md) 13 | - 0.3 Устанорвка Alt Linux [->](./createStend/installAltLinux/README.md) 14 | - 0.4 (Опционально) Настройка внеполосного управления виртуальными машинами [->](./createStend/connectToConsole/README.md) 15 | - 0.5 Подключение виртуальной машины к интернету [->](./createStend/connectVirtualMashinToInternet/README.md) 16 | - 0.6 Обновление до последнией версии [->](./createStend/updateAltLinux/README.md) 17 | - 0.7 Установка NMTUI [->](./createStend/instalNMTui/README.md) 18 | - 0.8 Соединение виртуальных машин между собой [->](./createStend/connectingVirtualMashin/README.md) 19 | - 0.9 Создание локального репозитория [->](./createStend/createLocalRepo/README.md) 20 | 1. Базовая настройка 21 | - 1.1 Настройка HOSTNAME [->](./createIPAddresses/assignHostname/README.md) 22 | - 1.2 Заполнение таблицы [->](./createIPAddresses/README.md) 23 | - 1.3 Настройка IP на интерфейсы способ 1 [->](./createIPAddresses/assignIPAddressesNMTui/README.md) 24 | - 1.4 Настройка IP на интерфейсы способ 2 [->](./createIPAddresses/assignIPAdressesEtcnet/README.md) 25 | - 1.4.1 Настройка IP на интерфейсы HQ-R [->](./createIPAddresses/assignIPAdressesEtcnet/HQ-R.md) 26 | - 1.4.2 Настройка IP на интерфейсы BR-R [->](./createIPAddresses/assignIPAdressesEtcnet/BR-R.md) 27 | - 1.4.3 Настройка IP на интерфейсы HQ-SRV [->](./createIPAddresses/assignIPAdressesEtcnet/HQ-SRV.md) 28 | - 1.4.3 Настройка IP на интерфейсы BR-SRV [->](./createIPAddresses/assignIPAdressesEtcnet/BR-SRV.md) 29 | - 1.5 Настройка туннелей [->](./createIPAddresses/createTunnel/README.md) 30 | 2. Настройка динамической маршрутизации 31 | - 2.1 Установка FRR [->](./createDynamicRouting/installFRRtoInternet/README.md) 32 | - 2.2 Настройка FRR [->](./createDynamicRouting/settingsFRR/README.md) 33 | 3. Настройка автоматического распределения IP-адресов на роутере HQ-R [->](./createDHCPServer//README.md) 34 | 4. Создание пользователей [->](./createUserName/README.md) 35 | 5. Проверка пропускной способности при помощи `iperf3` [->](./iperf/README.md) 36 | 6. Скрипт для резервного копирования FRR [->](./backup/README.md) -------------------------------------------------------------------------------- /решение/Модуль 1/backup/README.md: -------------------------------------------------------------------------------- 1 | # Создаем резервную копию настроек FRR 2 | 3 | Конфигурация для FRR храниться в /etc/frr/frr.conf 4 | 5 | Нужно ее просто копировать по расписанию 6 | 7 | Создадим папку для хранения резервной копии 8 | 9 | ``` 10 | mkdir /vat/backup 11 | ``` 12 | 13 | Добавим задание в планировщик cronetab 14 | 15 | ``` 16 | cronetab -e 17 | ``` 18 | 19 | ``` 20 | 0 0 * * * cp /etc/frr/frr.conf /vat/backup 21 | ``` 22 | 23 | Конфигурация будет копироваться каждый день в 00:00 -------------------------------------------------------------------------------- /решение/Модуль 1/createDHCPServer/README.md: -------------------------------------------------------------------------------- 1 | # Настройка автоматической раздачи IP адресов на HQ-R 2 | 3 | Подключаем интернет, как это дедали при установке [frr](../createDynamicRouting/installFRRtoInternet/README.md) 4 | 5 | Подробнее про [DHCP-сервер](https://www.altlinux.org/DHCP_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80) 6 | 7 | Устанавливаем `dhcp-server` 8 | 9 | ``` 10 | apt-get install dhcp-server 11 | ``` 12 | 13 | В первую очередь настроим на каком интерфейсе будет работать DHCP-сервер 14 | 15 | В моем случае это `ens192`. 16 | 17 | Отредактируем файл `/etc/sysconfig/dhcpd` 18 | 19 | ``` 20 | sed -i -e 's/DHCPDARGS=/DHCPDARGS=ens192/g' /etc/sysconfig/dhcpd 21 | ``` 22 | 23 | Проверьте, что все получилось правильно 24 | 25 | ``` 26 | cat /etc/sysconfig/dhcpd 27 | ``` 28 | 29 |

30 | 31 |

32 | 33 | В комплекте с DHCP-сервером есть примеры конфигурации, которые находятся здесь `/etc/dhcp/` 34 | 35 | Воспользуемся самым простым примером 36 | 37 | ``` 38 | cp /etc/dhcp/dhcpd.conf.sample /etc/dhcp/dhcpd.conf 39 | ``` 40 | 41 | Теперь редактируем `/etc/dhcp/dhcpd.conf` 42 | 43 | ``` 44 | vim /etc/dhcp/dhcpd.conf 45 | ``` 46 | 47 | Приводим его к такому виду . 48 | 49 | ``` 50 | # See dhcpd.conf(5) for further configuration 51 | 52 | ddns-update-style none; 53 | 54 | subnet 192.168.0.0 netmask 255.255.255.128 { 55 | option routers 192.168.0.1; 56 | option subnet-mask 255.255.255.128; 57 | 58 | # option nis-domain "domain.org"; 59 | # option domain-name "domain.org"; 60 | # option domain-name-servers 192.168.1.1; 61 | 62 | range dynamic-bootp 192.168.0.2 192.168.0.100; 63 | default-lease-time 21600; 64 | max-lease-time 43200; 65 | 66 | host HQ-SRV 67 | { 68 | hardware ethernet 00:50:56:b6:89:75; 69 | fixed-address 192.168.0.2; 70 | } 71 | } 72 | ``` 73 | 74 | ВНИМАНИЕ!. 75 | > [!CAUTION] 76 | > Кусок конфига, который относится к резервированию IP адреса содержит MAC-адрес `HQ-SRV`. У каждого он будет свовой 77 | 78 | 79 | ``` 80 | host HQ-SRV 81 | { 82 | hardware ethernet 00:50:56:b6:89:75; 83 | fixed-address 192.168.0.2; 84 | } 85 | ``` 86 | 87 | Включаем DHCP-сервер 88 | 89 | ``` 90 | systemctl enable --now dhcpd 91 | ``` 92 | 93 | Проверка 94 | 95 | ``` 96 | systemctl status dhcpd 97 | ``` 98 | 99 |

100 | 101 |

102 | 103 | 104 | ### Настройка HQ-SRV для получения IP-адреса автоматически 105 | 106 | Удаляем текущую статическую конфигурацию. 107 | 108 | ``` 109 | rm -f /etc/net/ifaces/ens192/ipv4address 110 | rm -f /etc/net/ifaces/ens192/ipv4route 111 | ``` 112 | 113 | Изменяем опцию получения адреса 114 | 115 | ``` 116 | sed -i -e 's/BOOTPROTO=static/BOOTPROTO=dhcp/g' /etc/net/ifaces/ens192/options 117 | ``` 118 | 119 | Перезагружаем сеть 120 | 121 | ``` 122 | systemctl restart network 123 | ``` 124 | 125 | Проверяем 126 | 127 |

128 | 129 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createDHCPServer/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDHCPServer/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDHCPServer/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDHCPServer/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDHCPServer/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDHCPServer/pic3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/installFRRtoInternet/README.md: -------------------------------------------------------------------------------- 1 | # Настройка динамической маршрутизации 2 | 3 | Для настройки маршрутизации нужно установить пакет frr на HQ-R и BR-R. 4 | 5 | Но проблема в отсутствие интернета на этих устройствах. Здесь могут быть два подхода. Подключить установочный диск и установить с него, а можно временно подключить интернет. 6 | 7 | Попробуем сделать методом подключения интернета. 8 | 9 | ### HQ-R 10 | 11 | Выключаем HQ-R и добавляем еще один интерфейс с сетью VMnetwork 12 | 13 |

14 | 15 |

16 | 17 | Назначим ему свободный IP из сети VMnetwork. У меня это сеть 10.12.66.0/24 18 | 19 | - 10.12.66.1 занят под сам ESXi 20 | - 10.12.66.2 занят под ISP 21 | - 10.12.66.3 назначим HQ-R 22 | - 10.12.66.4 назначим BR-R 23 | 24 | Настраиваем IP, шлюз и DNS на ens256 25 | 26 | Удаляем шлюз с ens224. После установки FRR нужно будет все вернуть назад 27 | 28 | 29 | ``` 30 | mkdir /etc/net/ifaces/ens256 31 | echo "TYPE=eth 32 | DISABLED=no 33 | NM_CONTROLLED=no 34 | BOOTPROTO=static 35 | CONFIG_IPv4=yes" > /etc/net/ifaces/ens256/options 36 | echo 10.12.66.3/24 > /etc/net/ifaces/ens256/ipv4address 37 | echo default via 10.12.66.254 > /etc/net/ifaces/ens256/ipv4route 38 | echo nameserver 8.8.8.8 > /etc/net/ifaces/ens256/resolv.conf 39 | rm -rf /etc/net/ifaces/ens224/ipv4route 40 | systemctl restart network 41 | ``` 42 | 43 | Проверка 44 | 45 |

46 | 47 |

48 | 49 | Может быть, что ESXi будет блокировать трафик. Добавим разрешения. 50 | 51 |

52 | 53 |

54 | 55 | На всякий случай обновим список пакетов 56 | 57 | ``` 58 | apt-get update 59 | ``` 60 | 61 | Теперь можем устанавливать `frr` и включить его 62 | 63 | ``` 64 | apt-get install frr 65 | systemctl enable --now frr 66 | ``` 67 | 68 | ### BR-R 69 | 70 | ``` 71 | mkdir /etc/net/ifaces/ens256 72 | echo "TYPE=eth 73 | DISABLED=no 74 | NM_CONTROLLED=no 75 | BOOTPROTO=static 76 | CONFIG_IPv4=yes" > /etc/net/ifaces/ens256/options 77 | echo 10.12.66.4/24 > /etc/net/ifaces/ens256/ipv4address 78 | echo default via 10.12.66.254 > /etc/net/ifaces/ens256/ipv4route 79 | echo nameserver 8.8.8.8 > /etc/net/ifaces/ens256/resolv.conf 80 | rm -rf /etc/net/ifaces/ens192/ipv4route 81 | systemctl restart network 82 | apt-get install frr 83 | systemctl enable --now frr 84 | ``` 85 | 86 |

87 | 88 |

89 | 90 | Теперь нужно отключить интернет 91 | 92 | 93 | ### HQ-R 94 | 95 | ``` 96 | rm -rf /etc/net/ifaces/ens256 97 | echo default via 1.1.1.1 > /etc/net/ifaces/ens224/ipv4route 98 | systemctl reboot 99 | ``` 100 | 101 | ### BR-R 102 | 103 | ``` 104 | rm -rf /etc/net/ifaces/ens256 105 | echo default via 2.2.2.1 > /etc/net/ifaces/ens192/ipv4route 106 | systemctl reboot 107 | ``` 108 | 109 | Проверка, что все восстановили 110 | 111 |

112 | 113 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/installFRRtoInternet/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDynamicRouting/installFRRtoInternet/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/installFRRtoInternet/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDynamicRouting/installFRRtoInternet/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/installFRRtoInternet/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDynamicRouting/installFRRtoInternet/pic3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/installFRRtoInternet/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDynamicRouting/installFRRtoInternet/pic4.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/installFRRtoInternet/pic5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDynamicRouting/installFRRtoInternet/pic5.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/settingsFRR/README.md: -------------------------------------------------------------------------------- 1 | # Настройка FRR 2 | 3 | ### HQ-R 4 | 5 | В файле `/etc/frr/daemons` активируем протокол `OSPF` 6 | 7 | ``` 8 | sed -i -e 's/ospfd=no/ospfd=yes/g' /etc/frr/daemons 9 | systemctl restart frr 10 | ``` 11 | 12 | Настраиваем OSPFv2 - переходим в интерфейс frr при помощи команды `vtysh`: 13 | 14 | ``` 15 | HQ-R# conf t 16 | HQ-R(config)# router ospf 17 | HQ-R(config-router)# passive-interface default 18 | HQ-R(config-router)# network 192.168.0.0/25 area 0 19 | HQ-R(config-router)# network 172.16.0.0/30 area 0 20 | HQ-R(config-router)# exit 21 | HQ-R(config)# int tun1 22 | HQ-R(config-if)# ip ospf network point-to-point 23 | HQ-R(config-if)# no ip ospf passive 24 | HQ-R(config-if)# do wr 25 | ``` 26 | 27 | ### BR-R 28 | 29 | В файле `/etc/frr/daemons` активируем протокол `OSPF` 30 | 31 | ``` 32 | sed -i -e 's/ospfd=no/ospfd=yes/g' /etc/frr/daemons 33 | systemctl restart frr 34 | ``` 35 | 36 | Настраиваем OSPFv2 - переходим в интерфейс frr при помощи команды `vtysh`: 37 | 38 | ``` 39 | BR-R# conf t 40 | BR-R(config)# router ospf 41 | BR-R(config-router)# passive-interface default 42 | BR-R(config-router)# network 192.168.0.128/27 area 0 43 | BR-R(config-router)# network 172.16.0.0/30 area 0 44 | BR-R(config-router)# int tun1 45 | BR-R(config-if)# ip ospf network point-to-point 46 | BR-R(config-if)# no ip ospf passive 47 | BR-R(config-if)# do wr 48 | ``` 49 | 50 | Проверка 51 | 52 |

53 | 54 |

55 | 56 |

57 | 58 |

59 | 60 |

61 | 62 |

63 | 64 |

65 | 66 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/settingsFRR/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDynamicRouting/settingsFRR/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/settingsFRR/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDynamicRouting/settingsFRR/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/settingsFRR/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDynamicRouting/settingsFRR/pic3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createDynamicRouting/settingsFRR/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createDynamicRouting/settingsFRR/pic4.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/README.md: -------------------------------------------------------------------------------- 1 | # Разработка IP адресации 2 | 3 | Прежде чем заполнять таблицу и начинать распределять IP адреса, нужно понять, что `ISP` это интернет провайдер. Интернет провайдер ничего не знает про ваши внутренние сети и в своей сети использует белые IP адреса. 4 | 5 | В задание нам нужно соединить головной офис `HQ` с филиалом `BRANCH`. На `ISP` мы не можем настраивать маршрутизацию к нашим внитренним сетям. Поэтому будем использовать туннель между `HQ-R` и `BR-R`. Соответственно для него тоже нужно предусмотреть IP адресацию. 6 | 7 | | HOSTNAME | INTERFACE | IP | MASK | DG | 8 | | ------------- | ------------- | ---------- | ---------- | ----------| 9 | | CLI | ens192 | DHCP | 255.255.255.0 | 94.41.92.1 | 10 | | ISP | ens161 | 2.2.2.1 | 255.255.255.252 | | 11 | | ISP | ens192 | 10.12.66.2 | 255.255.255.0 | 10.12.66.254 | 12 | | ISP | ens224 | 1.1.1.1 | 255.255.255.252 | | 13 | | ISP | ens256 | 94.41.92.1 | 255.255.255.0 | | 14 | | HQ-R | ens192 | 192.168.0.1 | 255.255.255.128 | | 15 | | HQ-R | ens224 | 1.1.1.2 | 255.255.255.252 | 1.1.1.1 | 16 | | HQ-R | tun1 | 172.16.0.1 | 255.255.255.252 | | 17 | | HQ-SRV | ens192 | 192.168.0.2 | 255.255.255.128 | 192.168.0.1 | 18 | | BR-R | ens192 | 2.2.2.2 | 255.255.255.252 | 2.2.2.1 | 19 | | BR-R | ens224 | 192.168.0.129 | 255.255.255.224 | | 20 | | BR-R | tun1 | 172.16.0.2 | 255.255.255.252 | | 21 | | BR-SRV | ens192 | 192.168.0.130 | 255.255.255.224 | 192.168.0.129 | -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignHostname/README.md: -------------------------------------------------------------------------------- 1 | # Настройка hostname 2 | 3 | Настроить `HOSTNAME` можно несколькими способами: 4 | 5 | Способ 1: Через `nmtui` 6 | 7 | Способ 2: Через редактирования файла `/etc/hostname` 8 | 9 | Способ 3: Коммандой в терминале `hostnamectl set-hostname` 10 | 11 | ``` 12 | hostnamectl set-hostname ISP 13 | ``` 14 | 15 | Чтобы изменение `HOSTNAME` вступили в силу нужно перезагрузить оболочку или устройство 16 | 17 | ``` 18 | exec bash 19 | или 20 | systemctl reboot 21 | ``` -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/README.md: -------------------------------------------------------------------------------- 1 | # Настройка IP адресов на интерфейсы 2 | 3 | ## Настройка ISP 4 | 5 | У нас уже установленна удобная утилитка `nmtui`. Запускаем еe. Выбираем пунк `Изменить подключение` 6 | 7 |

8 | 9 |

10 | 11 | Переходим в `Проводное подключение 1` 12 | 13 |

14 | 15 |

16 | 17 | Для удобства можно изменить имя профиля. 18 | 19 |

20 | 21 |

22 | 23 | После настройки всех IP адресов нужно перезагрузить интерфейсы. Это можно сделать в `nmtui` 24 | 25 |

26 | 27 |

28 | 29 | Выключаем, затем сразу включаем каждый интерфейс 30 | 31 |

32 | 33 |

34 | 35 | Либо коммандой в консоле 36 | 37 | ``` 38 | systemctl restart network.service 39 | ``` 40 | 41 | Должна получиться вот такая картина в `ip a` 42 | 43 |

44 | 45 |

46 | 47 | Теперь на каждом устройстве делаем тоже самое. -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic4.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic5.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAddressesNMTui/pic6.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/BR-R.md: -------------------------------------------------------------------------------- 1 | # Настойка сети на BR-R 2 | 3 | Смотрим какие интерфейсы существуют 4 | 5 | ``` 6 | ip a 7 | ``` 8 | 9 | Проверяем существуют ли директории для интерфейсов 10 | 11 | ``` 12 | ls -l /etc/net/ifaces/ 13 | ``` 14 | 15 | Если не существуют, то создаем 16 | 17 | ``` 18 | mkdir /etc/net/ifaces/ens192 19 | mkdir /etc/net/ifaces/ens224 20 | ``` 21 | 22 | Создаем файл `/etc/net/ifaces/ens192/options` 23 | 24 | ``` 25 | echo "TYPE=eth 26 | DISABLED=no 27 | NM_CONTROLLED=no 28 | BOOTPROTO=static 29 | CONFIG_IPv4=yes" > /etc/net/ifaces/ens192/options 30 | ``` 31 | 32 | Копируем `/etc/net/ifaces/ens192/options` в `/etc/net/ifaces/ens224/` 33 | 34 | ``` 35 | cp /etc/net/ifaces/ens192/options /etc/net/ifaces/ens224/ 36 | ``` 37 | 38 | Настраиваем IP адреса на интерфейсах 39 | 40 | ``` 41 | echo 2.2.2.2/30 > /etc/net/ifaces/ens192/ipv4address 42 | echo 192.168.0.129/27 > /etc/net/ifaces/ens224/ipv4address 43 | ``` 44 | 45 | Добавим маршрут по умолчанию в сторону ISP: 46 | 47 | ``` 48 | echo default via 2.2.2.1 > /etc/net/ifaces/ens192/ipv4route 49 | ``` 50 | 51 | Включаем маршрутизацию 52 | 53 | ``` 54 | sed -i -e 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/net/sysctl.conf 55 | ``` 56 | 57 | Перезагружаем виртуалку 58 | 59 | ``` 60 | systemctl reboot 61 | ``` 62 | 63 | Проверяем, что IP адреса настроились 64 | 65 | ``` 66 | ip a 67 | ``` 68 | 69 | Если до этого настраивали ISP должен работать ping 70 | 71 | ``` 72 | ping 2.2.2.1 73 | ``` 74 | 75 |

76 | 77 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/BR-SRV.md: -------------------------------------------------------------------------------- 1 | # Настойка сети на BR-SRV 2 | 3 | Смотрим какие интерфейсы существуют 4 | 5 | ``` 6 | ip a 7 | ``` 8 | 9 | Проверяем существуют ли директории для интерфейсов 10 | 11 | ``` 12 | ls -l /etc/net/ifaces/ 13 | ``` 14 | 15 | Если не существуют, то создаем 16 | 17 | ``` 18 | mkdir /etc/net/ifaces/ens192 19 | ``` 20 | 21 | Создаем файл `/etc/net/ifaces/ens192/options` 22 | 23 | ``` 24 | echo "TYPE=eth 25 | DISABLED=no 26 | NM_CONTROLLED=no 27 | BOOTPROTO=static 28 | CONFIG_IPv4=yes" > /etc/net/ifaces/ens192/options 29 | ``` 30 | 31 | Настраиваем IP адреса на интерфейсах 32 | 33 | ``` 34 | echo 192.168.0.130/25 > /etc/net/ifaces/ens192/ipv4address 35 | ``` 36 | 37 | Добавим маршрут по умолчанию в сторону HQ-R: 38 | 39 | ``` 40 | echo default via 192.168.0.129 > /etc/net/ifaces/ens192/ipv4route 41 | ``` 42 | 43 | Включаем маршрутизацию 44 | 45 | ``` 46 | sed -i -e 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/net/sysctl.conf 47 | ``` 48 | 49 | Перезагружаем виртуалку 50 | 51 | ``` 52 | systemctl reboot 53 | ``` 54 | 55 | Проверяем, что IP адреса настроились 56 | 57 | ``` 58 | ip a 59 | ``` 60 | 61 | Если до этого настраивали ISP должен работать ping 62 | 63 | ``` 64 | ping 192.168.0.129 65 | ``` 66 | 67 |

68 | 69 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/HQ-R.md: -------------------------------------------------------------------------------- 1 | # Настойка сети на HQ-R 2 | 3 | Смотрим какие интерфейсы существуют 4 | 5 | ``` 6 | ip a 7 | ``` 8 | 9 | Проверяем существуют ли директории для интерфейсов 10 | 11 | ``` 12 | ls -l /etc/net/ifaces/ 13 | ``` 14 | 15 | Если не существуют, то создаем 16 | 17 | ``` 18 | mkdir /etc/net/ifaces/ens192 19 | mkdir /etc/net/ifaces/ens224 20 | ``` 21 | 22 | Создаем файл `/etc/net/ifaces/ens192/options` 23 | 24 | ``` 25 | echo "TYPE=eth 26 | DISABLED=no 27 | NM_CONTROLLED=no 28 | BOOTPROTO=static 29 | CONFIG_IPv4=yes" > /etc/net/ifaces/ens192/options 30 | ``` 31 | 32 | Копируем `/etc/net/ifaces/ens192/options` в `/etc/net/ifaces/ens224/` 33 | 34 | ``` 35 | cp /etc/net/ifaces/ens192/options /etc/net/ifaces/ens224/ 36 | ``` 37 | 38 | Настраиваем IP адреса на интерфейсах 39 | 40 | ``` 41 | echo 192.168.0.1/25 > /etc/net/ifaces/ens192/ipv4address 42 | echo 1.1.1.2/30 > /etc/net/ifaces/ens224/ipv4address 43 | ``` 44 | 45 | Добавим маршрут по умолчанию в сторону ISP: 46 | 47 | ``` 48 | echo default via 1.1.1.1 > /etc/net/ifaces/ens224/ipv4route 49 | ``` 50 | 51 | Включаем маршрутизацию 52 | 53 | ``` 54 | sed -i -e 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/net/sysctl.conf 55 | ``` 56 | 57 | Перезагружаем виртуалку 58 | 59 | ``` 60 | systemctl reboot 61 | ``` 62 | 63 | Проверяем, что IP адреса настроились 64 | 65 | ``` 66 | ip a 67 | ``` 68 | 69 | Если до этого настраивали ISP должен работать ping 70 | 71 | ``` 72 | ping 1.1.1.1 73 | ``` 74 | 75 |

76 | 77 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/HQ-SRV.md: -------------------------------------------------------------------------------- 1 | # Настойка сети на HQ-SRV 2 | 3 | Смотрим какие интерфейсы существуют 4 | 5 | ``` 6 | ip a 7 | ``` 8 | 9 | Проверяем существуют ли директории для интерфейсов 10 | 11 | ``` 12 | ls -l /etc/net/ifaces/ 13 | ``` 14 | 15 | Если не существуют, то создаем 16 | 17 | ``` 18 | mkdir /etc/net/ifaces/ens192 19 | ``` 20 | 21 | Создаем файл `/etc/net/ifaces/ens192/options` 22 | 23 | ``` 24 | echo "TYPE=eth 25 | DISABLED=no 26 | NM_CONTROLLED=no 27 | BOOTPROTO=static 28 | CONFIG_IPv4=yes" > /etc/net/ifaces/ens192/options 29 | ``` 30 | 31 | Настраиваем IP адреса на интерфейсах 32 | 33 | ``` 34 | echo 192.168.0.2/25 > /etc/net/ifaces/ens192/ipv4address 35 | ``` 36 | 37 | Добавим маршрут по умолчанию в сторону HQ-R: 38 | 39 | ``` 40 | echo default via 192.168.0.1 > /etc/net/ifaces/ens192/ipv4route 41 | ``` 42 | 43 | Включаем маршрутизацию 44 | 45 | ``` 46 | sed -i -e 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/net/sysctl.conf 47 | ``` 48 | 49 | Перезагружаем виртуалку 50 | 51 | ``` 52 | systemctl reboot 53 | ``` 54 | 55 | Проверяем, что IP адреса настроились 56 | 57 | ``` 58 | ip a 59 | ``` 60 | 61 | Если до этого настраивали ISP должен работать ping 62 | 63 | ``` 64 | ping 192.168.0.1 65 | ``` 66 | 67 |

68 | 69 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/README.md: -------------------------------------------------------------------------------- 1 | # Назначение IP адреса через etcnet 2 | 3 | Если `NetworkManager` не установлен, то можно использовать встроенную систему `etcnet` 4 | 5 | Подробнее про `etcnet` [здесь](https://www.altlinux.org/Etcnet#%D0%98%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B8_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_/etc/net) 6 | 7 | Для каждого интрефейса из `ip a` должна быть создана однаимённая директория в `/etc/net/ifaces/` 8 | 9 |

10 | 11 |

12 | 13 | Если таких директорий не существует, то нужно их создать 14 | 15 | ``` 16 | mkdir /etc/net/ifaces/ens161 17 | mkdir /etc/net/ifaces/ens192 18 | mkdir /etc/net/ifaces/ens224 19 | mkdir /etc/net/ifaces/ens256 20 | ``` 21 | 22 |

23 | 24 |

25 | 26 | В каждой папке нужно создать файл `/etc/net/iface//options` 27 | 28 | ``` 29 | TYPE=eth 30 | DISABLE=no 31 | NM_CONTROLLED=no 32 | BOOTPROTO=static 33 | CONFIG_IPV4=yes 34 | ``` 35 | 36 | или 37 | 38 | ``` 39 | echo "TYPE=eth 40 | DISABLED=no 41 | NM_CONTROLLED=no 42 | BOOTPROTO=static 43 | CONFIG_IPv4=yes" > /etc/net/ifaces/ens161/options 44 | ``` 45 | 46 | проверка 47 | 48 |

49 | 50 |

51 | 52 | Для всех остальных интерфейсов этот файл идентичный. Поэтому его можно просто скопировать 53 | 54 | ``` 55 | cp /etc/net/ifaces/ens161/options /etc/net/ifaces/ens192/ 56 | cp /etc/net/ifaces/ens161/options /etc/net/ifaces/ens224/ 57 | cp /etc/net/ifaces/ens161/options /etc/net/ifaces/ens256/ 58 | ``` 59 | 60 | Чтобы назначить IP на интерфейс нужно создать файл `/etc/net/ifaces//ipv4address` в котором написать IP адрес с префиктом `1.1.1.1/30` 61 | 62 | ``` 63 | echo 2.2.2.1/30 > /etc/net/ifaces/ens161/ipv4address 64 | echo 10.12.66.2/24 > /etc/net/ifaces/ens192/ipv4address 65 | echo 1.1.1.1/30 > /etc/net/ifaces/ens224/ipv4address 66 | echo 94.41.92.1/24 > /etc/net/ifaces/ens256/ipv4address 67 | ``` 68 | 69 | На ISP добавим маршрут по умолчанию и DNS для выхода в интернет: 70 | 71 | ``` 72 | echo default via 10.12.66.254 > /etc/net/ifaces/ens192/ipv4route 73 | echo nameserver 8.8.8.8 > /etc/net/ifaces/ens192/resolv.conf 74 | ``` 75 | 76 | > [!CAUTION] 77 | > Обязательно нужно включить маршрутизацию на всех маршрутизаторах 78 | 79 | Для включения маршрутизации нужно изменить опцию `net.ipv4.ip_forward = 0` на `net.ipv4.ip_forward = 1`. Эта настройка находится в файле `/etc/net/sysctl.conf` 80 | 81 | ``` 82 | vim /etc/net/sysctl.conf 83 | ``` 84 | 85 | или 86 | 87 | ``` 88 | sed -i -e 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/net/sysctl.conf 89 | ``` 90 | 91 | Для применения всех сетевых настроек перезагружаем службу `network` 92 | 93 | ``` 94 | systemctl restart network 95 | ``` 96 | 97 |

98 | 99 |

100 | 101 | Подобные манипуляции нужно проделать на всех виртуальных машинах, кроме CLI. Ее настроим чуть позже -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic4.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic5.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic6.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic7.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/assignIPAdressesEtcnet/pic8.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/createTunnel/README.md: -------------------------------------------------------------------------------- 1 | # Создание туннелей между HQ-R и BR-R 2 | 3 | Перед настройкой туннеля нужно проверить что между HQ-R и BR-R есть связность 4 | 5 | ``` 6 | ping 2.2.2.2 7 | ``` 8 | 9 |

10 | 11 |

12 | 13 | ### HQ-R 14 | 15 | ``` 16 | mkdir /etc/net/ifaces/tun1 17 | echo 172.16.0.1/30 > /etc/net/ifaces/tun1/ipv4address 18 | echo "TYPE=iptun 19 | TUNTYPE=gre 20 | TUNLOCAL=1.1.1.2 21 | TUNREMOTE=2.2.2.2 22 | TUNOPTIONS='ttl 64' 23 | HOST=ens224 24 | " > /etc/net/ifaces/tun1/options 25 | systemctl restart network 26 | ``` 27 | 28 | ### BR-R 29 | 30 | ``` 31 | mkdir /etc/net/ifaces/tun1 32 | echo 172.16.0.2/30 > /etc/net/ifaces/tun1/ipv4address 33 | echo "TYPE=iptun 34 | TUNTYPE=gre 35 | TUNLOCAL=2.2.2.2 36 | TUNREMOTE=1.1.1.2 37 | TUNOPTIONS='ttl 64' 38 | HOST=ens192 39 | " > /etc/net/ifaces/tun1/options 40 | systemctl restart network 41 | ``` 42 | 43 |

44 | 45 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/createTunnel/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/createTunnel/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createIPAddresses/createTunnel/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createIPAddresses/createTunnel/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectToConsole/README.md: -------------------------------------------------------------------------------- 1 | # Подключение к виртуальной машине через консоль 2 | 3 | Управление виртуальной машиной через веб интерфейс не очень удобно. Например нет возможности копирования через буфер обмена рабочей машины. 4 | 5 | Для этого можно сделать внеполосное управление виртуальной машиной подключаясь непосредственно к ESXi серверу. 6 | 7 | Для этого добавим дополнительное устройство `Serial port` в виртуальной машине. 8 |

9 | 10 |

11 | 12 | 13 | Для каждой виртуалки порт должен быть уникальным. 14 | Например если есть две машины ISP и HQ-R, то для ISP делаем порт 5001, а для HQ-R - 5002 15 |

16 | 17 |

18 | 19 | В самой ОС нужно включить службу, добавить ее в автозагрузку и проверить статус: 20 | ``` 21 | systemctl start serial-getty@ttyS0.service 22 | systemctl enable serial-getty@ttyS0.service 23 | systemctl status serial-getty@ttyS0.service 24 | ``` 25 |

26 | 27 |

28 | 29 | 30 | #### Чтобы ESXi не блокировал трафик идущий на serial интерфейс виртуальных машин, нужно включить правило `remoteSerialPort` в фаерволе самого ESXi 31 | 32 | Проверим список правил Firewall 33 | Теперь нужно правило `remoteSerialPort` переключить в состояние `true`: 34 | 35 |

36 | 37 |

38 | 39 | Пробуем подключиться к нашей виртуальной машине. В качестве IP адреса выступает адрес ESXi сервера 40 |

41 | 42 |

43 | 44 | По умолчанию пользователю `root` запрещен доступ через Serial консоль, поэтому залогинимся обычным пользователем. 45 |

46 | 47 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectToConsole/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectToConsole/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectToConsole/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectToConsole/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectToConsole/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectToConsole/pic3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectToConsole/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectToConsole/pic4.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectToConsole/pic8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectToConsole/pic8.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectToConsole/pic9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectToConsole/pic9.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectVirtualMashinToInternet/README.md: -------------------------------------------------------------------------------- 1 | # Подключение виртуальной машины к Интернет. 2 | 3 | Если при установке ОС вы следовали моей инструкции, то интернет у вас уже подключен. Давайте проверим это. 4 | Попробуйте сделать пинг любого сайта в интернете. 5 | 6 | ``` 7 | ping mail.ru 8 | ``` 9 | 10 | Если в результате выполнения команды ping вы видите вот такую картину, то я вас поздравляю! Интернет подключен и дальнейшие шаги не нужны. 11 | 12 | > [!CAUTION] 13 | > Настоятельно рекомендую ознакомиться с дальнейшей инструкцией, чтобы знать что делать если что-то пошло не так 14 | 15 |

16 | 17 |

18 | 19 | Чтобы подключить любую виртуальную машину к Интернету достаточно подключить ее сетевой интерфейс к `VMnetwork` и задать IP из тойже подсети, что и ESXi. Не забывайте, что еще нужно задать `IP шлюза` и `DNS сервера`. 20 | 21 |

22 | 23 |

24 | 25 | Если на виртуальной машине есть несколько интерфейсов, то не всегда понятно как они соотносятся с интерфейсами в самой ОС. 26 | Идентифицировать их можно по mac-адресу 27 | 28 | В данном примере в ОС интерфейс под `номером 3`, а в списке оборудования виртуальной машины `Network Adapter 1` 29 | 30 |

31 | 32 |

33 | 34 | ## Настройка IP адреса 35 | 36 | В ALT Linux по умолчанию нет всеми любимого редактора `nano`, поэтому будем пользоваться `vim`. 37 | 38 | Надеюсь вы уже нашли мануал как пользоваться `VIM`. Не переживайте, дальше это будем делать более простым способом. 39 | 40 | ``` 41 | i - режим редактирования 42 | - выход из режима редактирования 43 | :q! - выйти без сохранения 44 | :wq - выйти с сохранением 45 | ``` 46 | 47 | В файл /etc/net/ifaces/ens192/ipv4address прописываем IP. 48 | 49 | > [!CAUTION] 50 | > Если вы настроете на виртуалке такой же `IP` как и на `ESXi`, то вы `потеряете` доступ к вашему стенду полностью 51 | 52 | ``` 53 | vim /etc/net/ifaces/ens192/ipv4address 54 | ``` 55 | 56 |

57 | 58 |

59 | 60 | Также отредактируем файл /etc/net/ifaces/ens192/options 61 | 62 | ``` 63 | vim /etc/net/ifaces/ens192/options 64 | ``` 65 | 66 |

67 | 68 |

69 | 70 | Зададим шлюз. Это такой же IP как и шлюз у вашего ESXi 71 | 72 | ``` 73 | vim /etc/net/ifaces/ens192/ipv4route 74 | ``` 75 | 76 |

77 | 78 |

79 | 80 | Чтобы имена в интернете преобразовывались в IP (mail.ru, ya.ru ит т.д.), нужен DNS сервер. Также укажем его 81 | 82 | ``` 83 | vim /etc/net/ifaces/ens192/resolv.conf 84 | ``` 85 | 86 |

87 | 88 |

89 | 90 | После внесения изменений нужно перезапустить службу network 91 | 92 | ``` 93 | systemctl restart network 94 | ``` 95 | 96 | Теперь проверим, что у нас получилось: 97 | 98 | ``` 99 | systemctl status network 100 | ``` 101 | 102 | ``` 103 | ip a 104 | ``` 105 | 106 |

107 | 108 | 109 |

110 | 111 | 112 | 113 | 114 | ``` 115 | ping mail.ru 116 | ``` 117 | 118 |

119 | 120 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic4.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic5.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic6.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic7.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic8.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectVirtualMashinToInternet/pic9.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectingVirtualMashin/README.md: -------------------------------------------------------------------------------- 1 | # Подключение виртуальных машин между собой. 2 | 3 | Для каждой виртуальной машины добавим недостающие интерфейсы 4 | 5 |

6 | 7 |

8 | 9 | Включаем виртуалку и через `ip a` определяем кто из них кто. 10 | 11 |

12 | 13 |

14 | 15 | Смотрим на топологию и подключаем в соответствующие сети. MAC адреса у вас будут отличаться! Будте внимательны. 16 | 17 |

18 | 19 |

20 | 21 | Такие действия проделываем с каждой виртуалкой. -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectingVirtualMashin/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectingVirtualMashin/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectingVirtualMashin/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectingVirtualMashin/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/connectingVirtualMashin/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/connectingVirtualMashin/pic3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createLocalRepo/README.md: -------------------------------------------------------------------------------- 1 | # Создание локального репозитория 2 | 3 | Чтобы устанавливать пакеты на виртуалки без Интернерта нужно сделать `ISO` образ репозитория и монтировать его как `DVD` диск к каждой виртуалке. 4 | 5 | Он будет храниться в `Datastore` на самом `ESXi`. Учитывайте, что полный репозиторий classic весит порядка 32 Gb. 6 | 7 | Можно весь репозиторий не качать, а скачать только необходимые пакеты и их зависимости. 8 | 9 | Мы пойдем по универсальному пути. Будем делать полный репозиторий. 10 | 11 | ### Скачиваем пакеты с офф сайта [здесь](http://ftp.altlinux.org/pub/distributions/ALTLinux/p10/branch/x86_64/RPMS.classic/) 12 | 13 | Создаем ISO образ. Название папки обязательно должно начинаться на `RPMS`. 14 | 15 |

16 | 17 |

18 | 19 | Закидываем это образ на ESXi 20 | 21 |

22 | 23 |

24 | 25 | Подключаем к виртуалке 26 | 27 |

28 | 29 |

30 | 31 | Проверяем, что виртуалка его видит. Если его нет, то выключите виртуалку. Подключите диск. Включите виртуалку. Убедитесь, что стоит галка `Connect` напротив `CD/DVD Drive` 32 | 33 | ``` 34 | lsblk 35 | ``` 36 | 37 |

38 | 39 |

40 | 41 | Создаем папку куда будем монтировать диск 42 | 43 | ``` 44 | mkdir -p /mnt/x86-64/ 45 | ``` 46 | 47 | Монтируем диск 48 | 49 | ``` 50 | mount /dev/sr0 /mnt/x86-64/ 51 | ``` 52 | 53 | Должно получиться вот так. 54 | 55 |

56 | 57 |

58 | 59 | Добавляем репозиторий 60 | 61 | ``` 62 | apt-repo add 'rpm-dir file:/mnt x86-64 classic' 63 | ``` 64 | 65 | Должно получиться вот так. 66 | 67 |

68 | 69 |

70 | 71 | Отключаем стандартные репозитории. 72 | 73 | ``` 74 | vim /etc/apt/sources.list.d/alt.list 75 | ``` 76 | 77 | Должно получиться вот так. 78 | 79 |

80 | 81 |

82 | 83 | Обнавляем репозитории. Репозиторий большой, процесс может занимать некоторое время 84 | 85 | ``` 86 | apt-get update 87 | ``` 88 | 89 | Пробуем установить `iperf3` 90 | 91 | ``` 92 | apt-get install -y iperf3 93 | ``` 94 | 95 |

96 | 97 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createLocalRepo/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createLocalRepo/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createLocalRepo/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createLocalRepo/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createLocalRepo/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createLocalRepo/pic3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createLocalRepo/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createLocalRepo/pic4.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createLocalRepo/pic5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createLocalRepo/pic5.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createLocalRepo/pic6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createLocalRepo/pic6.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createLocalRepo/pic7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createLocalRepo/pic7.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createLocalRepo/pic8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createLocalRepo/pic8.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualConnect/README.md: -------------------------------------------------------------------------------- 1 | ## Создание виртуальных "проводов" для подключения виртуальных машин друг к другу 2 | Прежде чем собирать топологию нужно подумать как отделить трафик интерфейсов виртуальных машин друг от друга. 3 | Для этого создадим виртуальный коммутатор, который в дальнейшем разобъем на vlan. Каждая vlan будет служить отдельной канальной средой для подключения виртуальных машин друг к другу. 4 |

5 | 6 |

7 | 8 | Чтобы исключить блокировку трафика виртуалок сделаем настройки безопасности `Accept` 9 |

10 | 11 |

12 | 13 | Создадим `Port Group` к которым будем подключать виртуальные машины. 14 | Важно, чтобы номера vlan у каждой `Port Group` были разные. Также следите чтобы создаваемые `Port Group` были подключены к созданному прежде вами виртуальному коммутатору. 15 |

16 | 17 |

18 | 19 |

20 | 21 |

22 | 23 | -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualConnect/pic1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createVirtualConnect/pic1-1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualConnect/pic1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createVirtualConnect/pic1-2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualConnect/pic1-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createVirtualConnect/pic1-3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualConnect/pic1-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createVirtualConnect/pic1-4.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualMashin/README.md: -------------------------------------------------------------------------------- 1 | ## Создание виртуальных машин 2 | 3 |

4 | 5 |

6 | 7 |

8 | 9 |

10 | 11 | На этапе выбора шаблона операционной системы в списке нет шаблона для ALT Linux, поэтому выберем примерно похожую конфигурацию. 12 | 13 |

14 | 15 |

16 | 17 | Название места хранения у вас может отличаться от моего, но это не важно. Просто выберите любой доступный диск. Скорее всего у вас он будет один и с другими параметрами объема. 18 | 19 |

20 | 21 |

22 | 23 | 1. Чтобы упростить себе жизнь и не заниматься ручным созданиев разделов на диске, объем диска для виртуалки нужно сделать больше 26 Gb. Возьмём немного с запасом и изменим на 32 Gb. 24 | 2. Предварительно выпустим нашу виртуалку в интернет, чтобы обновить до последней версии и установим пакеты, которые потребуются на первое время. Т.е. этот интерфейс подключен к тойже сети, что и ваш ESXi. 25 | 3. В хранилище ESXi должен быть образ ОС с Alt Server. Выберите его. Если такого образа нет, нужно его туда загрузить. Последнюю актуальну версию можно взять [здесь](https://www.altlinux.org/Releases/Download) 26 | 27 | Нажимаем Next и Finish 28 |

29 | 30 |

31 | 32 | Виртуальная машина была создана. Теперь ее можно запускать. 33 |

34 | 35 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualMashin/pic1-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createVirtualMashin/pic1-10.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualMashin/pic1-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createVirtualMashin/pic1-5.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualMashin/pic1-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createVirtualMashin/pic1-6.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualMashin/pic1-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createVirtualMashin/pic1-7.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualMashin/pic1-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createVirtualMashin/pic1-8.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/createVirtualMashin/pic1-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/createVirtualMashin/pic1-9.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/instalNMTui/README.md: -------------------------------------------------------------------------------- 1 | # Установка NMTUI 2 | 3 | Чтобы облегчить себе жизнь в настройке интерфесов установим менеджер 4 | 5 | ``` 6 | apt-get install NetworkManager-tui 7 | ``` 8 | 9 | Запустим его и добавим в автозагрузку. 10 | 11 | ``` 12 | systemctl start NetworkManager 13 | systemctl enable NetworkManager 14 | ``` 15 | 16 | Проверим, что все хорошо: 17 | 18 | ``` 19 | systemctl status NetworkManage 20 | ``` 21 | 22 |

23 | 24 |

25 | 26 | Запускаем: 27 | 28 | ``` 29 | nmtui 30 | ``` 31 | 32 |

33 | 34 |

35 | 36 | Поздравляю! Теперь вы можете радактировать интерфейсы без страшного VIM-a 37 | 38 | Осталось только убедиться, что вы видите все интерфейсы из `ip a` внутри `nmtui`. 39 | Если каких-то интерфейсов нет, то проверяем `/etc/net/ifaces/[имя интерфейса]/options` 40 | 41 | Например: 42 | ``` 43 | cat /etc/net/ifaces/ens161/options 44 | ``` 45 | 46 |

47 | 48 |

49 | 50 | Если видим строку `NM_CONTROLLED=no`, редактируем при помощи ужасного VIM-a :-) 51 | 52 | Перезапускаем сеть и NetworkManager 53 | 54 | ``` 55 | systemctl restart network 56 | systemctl restart NetworkManager 57 | ``` -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/instalNMTui/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/instalNMTui/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/instalNMTui/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/instalNMTui/pic2.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/instalNMTui/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/instalNMTui/pic3.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/README.md: -------------------------------------------------------------------------------- 1 | # Устанока ALT Linux 2 | 3 |

4 | 5 |

6 | 7 |

8 | 9 |

10 | 11 |

12 | 13 |

14 |

15 | 16 |

17 |

18 | 19 |

20 |

21 | 22 |

23 | 24 | Нужно выбрать IP из тойже подсети, что и ваш сервер ESXi 25 | 26 |

27 | 28 |

29 |

30 | 31 |

32 |

33 | 34 |

35 |

36 | 37 |

-------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/pic1-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/installAltLinux/pic1-11.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/pic1-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/installAltLinux/pic1-12.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/pic1-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/installAltLinux/pic1-13.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/pic1-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/installAltLinux/pic1-14.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/pic1-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/installAltLinux/pic1-15.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/pic1-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/installAltLinux/pic1-16.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/pic1-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/installAltLinux/pic1-17.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/pic1-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/installAltLinux/pic1-18.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/pic1-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/installAltLinux/pic1-19.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/installAltLinux/pic1-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createStend/installAltLinux/pic1-20.png -------------------------------------------------------------------------------- /решение/Модуль 1/createStend/updateAltLinux/README.md: -------------------------------------------------------------------------------- 1 | # Обнавление ALT Linux 2 | 3 | > [!CAUTION] 4 | > Предварительно нужно настроить интернет 5 | 6 | 7 | Выполнить обновление можно командами 8 | ``` 9 | apt-get update && apt-get dist-upgrade 10 | ``` 11 | 12 | [Подробнее про обновление](https://www.altlinux.org/%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%9E%D0%A1) 13 | 14 | -------------------------------------------------------------------------------- /решение/Модуль 1/createUserName/README.md: -------------------------------------------------------------------------------- 1 | # Создание пользователей 2 | 3 | ### Общий принцип такой: 4 | 5 | 6 | > [!CAUTION] 7 | > Если вы переходите в суперпользователя через команду `su`, то комманды не будут доступны 8 | 9 |

10 | 11 |

12 | 13 | Переходим в суперпользователя через `su -` 14 | 15 | Создаем пользователя 16 | 17 | ``` 18 | adduser admin 19 | ``` 20 | 21 | Добавляем его у группу суперпользователя 22 | 23 | ``` 24 | usermod -aG root admin 25 | ``` 26 | 27 | Задаем пароль 28 | 29 | ``` 30 | passwd admin 31 | 32 | Enter new password: P@ssw0rd 33 | Re-type new password: P@ssw0rd 34 | ``` 35 | 36 | ## HQ-R и HQ-SRV 37 | 38 | ``` 39 | useradd admin 40 | usermod -aG root admin 41 | passwd admin 42 | ``` 43 | 44 | ``` 45 | adduser network_admin 46 | usermod -aG root network_admin 47 | passwd network_admin 48 | ``` 49 | 50 | ## BR-R и BR-SRV 51 | 52 | ``` 53 | adduser network_admin 54 | usermod -aG root network_admin 55 | passwd network_admin 56 | ``` 57 | 58 | ``` 59 | adduser branch_admin 60 | usermod -aG root branch_admin 61 | passwd branch_admin 62 | ``` -------------------------------------------------------------------------------- /решение/Модуль 1/createUserName/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/createUserName/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/iperf/README.md: -------------------------------------------------------------------------------- 1 | # Измерение пропускной способности при помощи iperf3 2 | 3 | Установим пакет `iperf3` на `HQ-R` и `ISP` 4 | 5 | ``` 6 | apt-get install iperf3 7 | ``` 8 | 9 | На `ISP` запустим `iperf3` в качестве сервера 10 | 11 | ``` 12 | iperf3 -s 13 | ``` 14 | 15 | На `HQ-R` запустим `iperf3` в качестве клиента. Посде `-c` пишем IP ISP 16 | 17 | ``` 18 | iperf3 -c 1.1.1.1 19 | ``` 20 | 21 | Должен получиться подобный результат 22 | 23 |

24 | 25 |

-------------------------------------------------------------------------------- /решение/Модуль 1/iperf/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/iperf/pic1.png -------------------------------------------------------------------------------- /решение/Модуль 1/Топология.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/netadmin-str/demo2024/880cfc3358953b0bf03e164d93d82ed59e4e5086/решение/Модуль 1/Топология.jpg --------------------------------------------------------------------------------