Terraform: все об этом

ADM-HQ:

  • Устанавливаем Terraform:из-под суперпользователя root

cd ~

unzip terraform_1.14.5_linux_amd64.zip -d /usr/local/bin/

  • Проверить:из-под системного пользователя user

[user@adm-hq ~]$ terraform --version Terraform v1.14.5 on linux_amd64

  • Настраиваем Terraform:из-под системного пользователя user

cat <<EOF > ~/.terraformrc provider_installation { network_mirror { url = "https://terraform-mirror.mcs.mail.ru" include = ["registry.terraform.io/*/*"] } direct { exclude = ["registry.terraform.io/*/*"] } }

EOF

  • Создаём требуемую директорию для хранения файлов Terraform:

mkdir /home/student/terraform

cd /home/student/terraform

  • Создаём файл terraform.tf и указываем каких провайдеров будем использовать:

cat < terraform.tf terraform { required_providers { freeipa = { source = "camptocamp/freeipa" version = "1.0.0" } } } E

  • Создаём файл providers.tf и указываем необходимые для подключения параметры для каждого из провайдеров:

cat < providers.tf provider "freeipa" { host = var.freeipa_host username = var.freeipa_username password = var.freeipa_username_password insecure = true } EOF

  • Создаём файл variable.tf и указываем переменные которые будет использовать Terraform:

cat < variable.tf variable "freeipa_host" { type = string description = "Access to the FreeIPA host" } variable "freeipa_username" { type = string description = "Access to the FreeIPA host username" } variable "freeipa_username_password" { type = string description = "Access to the FreeIPA host username password" sensitive = true } EOF

  • Создаём файл terraform.tfvars и указываем значения переменных которые были указаны в файле variable.tf:

cat < terraform.tfvars freeipa_host = "srv-hq.au.team" freeipa_username = "admin" freeipa_username_password = "P@ssw0rd" EOF

  • Инициализируем директорию для работы с Terraform и указанным провайдером:

terraform init

  • должно получиться следующее:

... Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.

  • Проверить:
  • Реализуем необходимый функционал:

cat <> variable.tf variable "reverse_zones" { description = "List of reverse viewing zones" type = list(string) default = [ "2.1.10.in-addr.arpa.", "0.2.10.in-addr.arpa.", "1.2.10.in-addr.arpa.", "2.2.10.in-addr.arpa.", "16.172.in-addr.arpa." ] } variable "dns_records" { description = "List of DNS records (A and corresponding PTR)" type = list(object({ hostname = string ip_address = string forward_zone = string reverse_zone = optional(string) reverse_zone_record = optional(string) })) default = [ { hostname = "fw-hq" ip_address = "10.1.1.1" forward_zone = "au.team." reverse_zone = "1.1.10.in-addr.arpa." reverse_zone_record = "1" }, { hostname = "adm-hq" ip_address = "10.1.1.46" forward_zone = "au.team." reverse_zone = "1.1.10.in-addr.arpa." reverse_zone_record = "46" }, { hostname = "rtr-br" ip_address = "10.2.0.1" forward_zone = "au.team." reverse_zone = "0.2.10.in-addr.arpa." reverse_zone_record = "1" }, { hostname = "fw-br" ip_address = "10.2.0.2" forward_zone = "au.team." reverse_zone = "0.2.10.in-addr.arpa." reverse_zone_record = "2" }, { hostname = "srv-br" ip_address = "10.2.1.10" forward_zone = "au.team." reverse_zone = "1.2.10.in-addr.arpa." reverse_zone_record = "10" }, { hostname = "rtr-cod" ip_address = "172.16.1.254" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "254.1" }, { hostname = "sw-cod" ip_address = "172.16.1.0" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "0.1" }, { hostname = "ha1-cod" ip_address = "172.16.0.1" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "1.0" }, { hostname = "ha2-cod" ip_address = "172.16.0.2" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "2.0" }, { hostname = "srv1-cod" ip_address = "172.16.1.1" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "1.1" }, { hostname = "srv2-cod" ip_address = "172.16.1.2" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "2.1" }, { hostname = "srv3-cod" ip_address = "172.16.1.3" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "3.1" } ] } EOF

  • создаём файл dns.tf и указываем требуемые ресурсы

resource "freeipa_dns_zone" "reverse" { for_each = toset(var.reverse_zones) zone_name = each.value } resource "freeipa_dns_record" "a" { for_each = { for r in var.dns_records : r.hostname => r } dnszoneidnsname = each.value.forward_zone idnsname = each.value.hostname records = [each.value.ip_address] type = "A" } resource "freeipa_dns_record" "ptr" { for_each = { for r in var.dns_records : r.hostname => r } dnszoneidnsname = each.value.reverse_zone idnsname = each.value.reverse_zone_record records = ["${each.value.hostname}.${each.value.forward_zone}"] type = "PTR" depends_on = [freeipa_dns_zone.reverse] }

  • Запускаем развёртывание ресурсов:

terraform apply -auto-approve

  • должно получиться следующее:
  • Проверить:
  • При повторном запуске, ошибок не возникает:
  • Проверить работоспособность:

[user@adm-hq terraform]$ host fw-hq.au.team fw-hq.au.team has address 10.1.1.1 [user@adm-hq terraform]$ host adm-hq.au.team adm-hq.au.team has address 10.1.1.46 [user@adm-hq terraform]$ host rtr-br.au.team rtr-br.au.team has address 10.2.0.1 [user@adm-hq terraform]$ host fw-br.au.team fw-br.au.team has address 10.2.0.2 [user@adm-hq terraform]$ host srv-br.au.team srv-br.au.team has address 10.2.1.10 [user@adm-hq terraform]$ host rtr-cod.au.team rtr-cod.au.team has address 172.16.1.254 [user@adm-hq terraform]$ host sw-cod.au.team sw-cod.au.team has address 172.16.1.0 [user@adm-hq terraform]$ host ha1-cod.au.team ha1-cod.au.team has address 172.16.0.1 [user@adm-hq terraform]$ host ha2-cod.au.team ha2-cod.au.team has address 172.16.0.2 [user@adm-hq terraform]$ host srv1-cod.au.team srv1-cod.au.team has address 172.16.1.1 [user@adm-hq terraform]$ host srv2-cod.au.team srv2-cod.au.team has address 172.16.1.2 [user@adm-hq terraform]$ host srv3-cod.au.team srv3-cod.au.team has address 172.16.1.3 [user@adm-hq terraform]$ host 10.1.1.1 1.1.1.10.in-addr.arpa domain name pointer fw-hq.au.team. [user@adm-hq terraform]$ host 10.1.1.46 46.1.1.10.in-addr.arpa domain name pointer adm-hq.au.team. [user@adm-hq terraform]$ host 10.2.0.1 1.0.2.10.in-addr.arpa domain name pointer rtr-br.au.team. [user@adm-hq terraform]$ host 10.2.0.2 2.0.2.10.in-addr.arpa domain name pointer fw-br.au.team. [user@adm-hq terraform]$ host 10.2.1.10 10.1.2.10.in-addr.arpa domain name pointer srv-br.au.team. [user@adm-hq terraform]$ host 172.16.1.254 254.1.16.172.in-addr.arpa domain name pointer rtr-cod.au.team. [user@adm-hq terraform]$ host 172.16.1.0 0.1.16.172.in-addr.arpa domain name pointer sw-cod.au.team. [user@adm-hq terraform]$ host 172.16.0.1 1.0.16.172.in-addr.arpa domain name pointer ha1-cod.au.team. [user@adm-hq terraform]$ host 172.16.0.2 2.0.16.172.in-addr.arpa domain name pointer ha2-cod.au.team. [user@adm-hq terraform]$ host 172.16.1.1 1.1.16.172.in-addr.arpa domain name pointer srv1-cod.au.team. [user@adm-hq terraform]$ host 172.16.1.2 2.1.16.172.in-addr.arpa domain name pointer srv2-cod.au.team. [user@adm-hq terraform]$ host 172.16.1.3 3.1.16.172.in-addr.arpa domain name pointer srv3-cod.au.team.

Последнее изменение: вторник, 17 марта 2026, 14:14

Тоже самое:

ADM-HQ:

  • Устанавливаем Terraform:из-под суперпользователя root

wget https://hashicorp-releases.yandexcloud.net/terraform/1.14.5/terraform_1.14.5_linux_amd64.zipunzip terraform_1.14.5_linux_amd64.zip -d /usr/local/bin/

  • Проверить:из-под системного пользователя user

[user@adm-hq ~]$ terraform --version Terraform v1.14.5 on linux_amd64

  • Настраиваем Terraform:из-под системного пользователя user

cat <<EOF > ~/.terraformrc provider_installation { network_mirror { url = "https://terraform-mirror.mcs.mail.ru" include = ["registry.terraform.io/*/*"] } direct { exclude = ["registry.terraform.io/*/*"] } } EOF

  • Создаём требуемую директорию для хранения файлов Terraform:

mkdir /home/user/terraform cd /home/user/terraform

  • Создаём файл terraform.tf и указываем каких провайдеров будем использовать:

cat < terraform.tf terraform { required_providers { freeipa = { source = "camptocamp/freeipa" version = "1.0.0" } } } EOF

  • Создаём файл providers.tf и указываем необходимые для подключения параметры для каждого из провайдеров:

cat < providers.tf provider "freeipa" { host = var.freeipa_host username = var.freeipa_username password = var.freeipa_username_password insecure = true } EOF

  • Создаём файл variable.tf и указываем переменные которые будет использовать Terraform:

cat < variable.tf variable "freeipa_host" { type = string description = "Access to the FreeIPA host" } variable "freeipa_username" { type = string description = "Access to the FreeIPA host username" } variable "freeipa_username_password" { type = string description = "Access to the FreeIPA host username password" sensitive = true } EOF

  • Создаём файл terraform.tfvars и указываем значения переменных которые были указаны в файле variable.tf:

cat < terraform.tfvars freeipa_host = "srv-hq.au.team" freeipa_username = "admin" freeipa_username_password = "P@ssw0rd" EOF

  • Инициализируем директорию для работы с Terraform и указанным провайдером:

terraform init

  • должно получиться следующее:

... Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.

  • Проверить:
  • Реализуем необходимый функционал:

cat <> variable.tf variable "reverse_zones" { description = "List of reverse viewing zones" type = list(string) default = [ "2.1.10.in-addr.arpa.", "0.2.10.in-addr.arpa.", "1.2.10.in-addr.arpa.", "2.2.10.in-addr.arpa.", "16.172.in-addr.arpa." ] } variable "dns_records" { description = "List of DNS records (A and corresponding PTR)" type = list(object({ hostname = string ip_address = string forward_zone = string reverse_zone = optional(string) reverse_zone_record = optional(string) })) default = [ { hostname = "fw-hq" ip_address = "10.1.1.1" forward_zone = "au.team." reverse_zone = "1.1.10.in-addr.arpa." reverse_zone_record = "1" }, { hostname = "adm-hq" ip_address = "10.1.1.46" forward_zone = "au.team." reverse_zone = "1.1.10.in-addr.arpa." reverse_zone_record = "46" }, { hostname = "rtr-br" ip_address = "10.2.0.1" forward_zone = "au.team." reverse_zone = "0.2.10.in-addr.arpa." reverse_zone_record = "1" }, { hostname = "fw-br" ip_address = "10.2.0.2" forward_zone = "au.team." reverse_zone = "0.2.10.in-addr.arpa." reverse_zone_record = "2" }, { hostname = "srv-br" ip_address = "10.2.1.10" forward_zone = "au.team." reverse_zone = "1.2.10.in-addr.arpa." reverse_zone_record = "10" }, { hostname = "rtr-cod" ip_address = "172.16.1.254" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "254.1" }, { hostname = "sw-cod" ip_address = "172.16.1.0" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "0.1" }, { hostname = "ha1-cod" ip_address = "172.16.0.1" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "1.0" }, { hostname = "ha2-cod" ip_address = "172.16.0.2" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "2.0" }, { hostname = "srv1-cod" ip_address = "172.16.1.1" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "1.1" }, { hostname = "srv2-cod" ip_address = "172.16.1.2" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "2.1" }, { hostname = "srv3-cod" ip_address = "172.16.1.3" forward_zone = "au.team." reverse_zone = "16.172.in-addr.arpa." reverse_zone_record = "3.1" } ] } EOF

  • создаём файл dns.tf и указываем требуемые ресурсы

resource "freeipa_dns_zone" "reverse" { for_each = toset(var.reverse_zones) zone_name = each.value } resource "freeipa_dns_record" "a" { for_each = { for r in var.dns_records : r.hostname => r } dnszoneidnsname = each.value.forward_zone idnsname = each.value.hostname records = [each.value.ip_address] type = "A" } resource "freeipa_dns_record" "ptr" { for_each = { for r in var.dns_records : r.hostname => r } dnszoneidnsname = each.value.reverse_zone idnsname = each.value.reverse_zone_record records = ["${each.value.hostname}.${each.value.forward_zone}"] type = "PTR" depends_on = [freeipa_dns_zone.reverse] }

  • Запускаем развёртывание ресурсов:

terraform apply -auto-approve

  • должно получиться следующее:
  • Проверить:
  • При повторном запуске, ошибок не возникает:
  • Проверить работоспособность:

[user@adm-hq terraform]$ host fw-hq.au.team fw-hq.au.team has address 10.1.1.1 [user@adm-hq terraform]$ host adm-hq.au.team adm-hq.au.team has address 10.1.1.46 [user@adm-hq terraform]$ host rtr-br.au.team rtr-br.au.team has address 10.2.0.1 [user@adm-hq terraform]$ host fw-br.au.team fw-br.au.team has address 10.2.0.2 [user@adm-hq terraform]$ host srv-br.au.team srv-br.au.team has address 10.2.1.10 [user@adm-hq terraform]$ host rtr-cod.au.team rtr-cod.au.team has address 172.16.1.254 [user@adm-hq terraform]$ host sw-cod.au.team sw-cod.au.team has address 172.16.1.0 [user@adm-hq terraform]$ host ha1-cod.au.team ha1-cod.au.team has address 172.16.0.1 [user@adm-hq terraform]$ host ha2-cod.au.team ha2-cod.au.team has address 172.16.0.2 [user@adm-hq terraform]$ host srv1-cod.au.team srv1-cod.au.team has address 172.16.1.1 [user@adm-hq terraform]$ host srv2-cod.au.team srv2-cod.au.team has address 172.16.1.2 [user@adm-hq terraform]$ host srv3-cod.au.team srv3-cod.au.team has address 172.16.1.3 [user@adm-hq terraform]$ host 10.1.1.1 1.1.1.10.in-addr.arpa domain name pointer fw-hq.au.team. [user@adm-hq terraform]$ host 10.1.1.46 46.1.1.10.in-addr.arpa domain name pointer adm-hq.au.team. [user@adm-hq terraform]$ host 10.2.0.1 1.0.2.10.in-addr.arpa domain name pointer rtr-br.au.team. [user@adm-hq terraform]$ host 10.2.0.2 2.0.2.10.in-addr.arpa domain name pointer fw-br.au.team. [user@adm-hq terraform]$ host 10.2.1.10 10.1.2.10.in-addr.arpa domain name pointer srv-br.au.team. [user@adm-hq terraform]$ host 172.16.1.254 254.1.16.172.in-addr.arpa domain name pointer rtr-cod.au.team. [user@adm-hq terraform]$ host 172.16.1.0 0.1.16.172.in-addr.arpa domain name pointer sw-cod.au.team. [user@adm-hq terraform]$ host 172.16.0.1 1.0.16.172.in-addr.arpa domain name pointer ha1-cod.au.team. [user@adm-hq terraform]$ host 172.16.0.2 2.0.16.172.in-addr.arpa domain name pointer ha2-cod.au.team. [user@adm-hq terraform]$ host 172.16.1.1 1.1.16.172.in-addr.arpa domain name pointer srv1-cod.au.team. [user@adm-hq terraform]$ host 172.16.1.2 2.1.16.172.in-addr.arpa domain name pointer srv2-cod.au.team. [user@adm-hq terraform]$ host 172.16.1.3 3.1.16.172.in-addr.arpa domain name pointer srv3-cod.au.team.

echo "P@ssw0rd" | kinit admin@AU.TEAM

  • Для создания роли CIFS servers:

ipa role-add "CIFS server" --desc="Role for CIFS server"

  • Для создания Organization units:

ipa role-add "Organization units" --desc="Role for Organization units"

  • Создаём требуемую структуру групп и пользователей в доменепредварительно получив билет Kerberos

echo "P@ssw0rd" | kinit admin

  • создаём группы

ipa group-add hq ipa group-add br ipa group-add cod

  • создаём пользователей

for i in {1..5}; do echo "P@ssw0rd" | ipa user-add hq.user$i --first=hq --last=user$i --password echo "P@ssw0rd" | ipa user-add br.user$i --first=br --last=user$i --password echo "P@ssw0rd" | ipa user-add cod.user$i --first=cod --last=user$i --password done

  • распределяем пользователей по группам

for i in {1..5}; do ipa group-add-member hq --users=hq.user$i ipa group-add-member br --users=br.user$i ipa group-add-member cod --users=cod.user$i done

mv /home/user/Загрузки/root_ca.crt /etc/pki/ca-trust/source/anchors/ && update-ca-trust

BR-FW:

  • В настроящий момент имеем:eth0 - интерфейс в сторону RTR-BReth1 - интерфейс в сторону vSW-BR

fw-br.au.team# inet show interface Interfaces info collection is in progress... ---------- eth0: flags=4163 mtu 1500 ether bc:24:11:d5:35:70 txqueuelen 1000 (Ethernet) RX packets 45 bytes 3426 (3.3 KiB) RX errors 0 dropped 8 overruns 0 frame 0 TX packets 188 bytes 64296 (62.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 Configured by DHCP: yes Information requested from DHCP server: IP address, routes, DNS servers, NTP servers DHCP route metric: default (70) Class: access Link detected: yes ---------- eth1: flags=4163 mtu 1500 ether bc:24:11:fb:8e:49 txqueuelen 1000 (Ethernet) RX packets 558 bytes 118452 (115.6 KiB) RX errors 0 dropped 459 overruns 0 frame 0 TX packets 185 bytes 63270 (61.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 Configured by DHCP: no Class: trunk Link detected: yes ---------- lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1 (Local Loopback) RX packets 27169 bytes 3306610 (3.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 27169 bytes 3306610 (3.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ---------- The current number of network interfaces on the system is 3. The maximum limit of interfaces is 512. fw-br.au.team#

  • Задаём имя:

localhost> enable Type the administrator password: localhost# machine set hostname fw-br.au.team

  • Для организации обработки трафика из нескольких VLAN выполняем следующие действия:завершаем работу управляющей службы

iplir stop

  • изменяем класс интерфейса, к которому подключен коммутатор

inet ifconfig eth1 class trunk

  • Должно получиться следующее:

fw-br.au.team# inet ifconfig eth1 class trunk All IP addresses and their aliases on this interface will be deleted. Continue?[Yes,No]: Yes Interface eth1 has lost DHCP configured information such as default gateway, DNS and NTP servers. This may affect network connectivity and local services like DNS and NTP. Please check their status manually. eth1 set to trunk class. fw-br.au.team#

  • Задаём номера виртуальных интерфейсов, которые будут соответствовать виртуальным сетям за коммутатором:в соответствие с L2

inet ifconfig eth1 vlan add 10 inet ifconfig eth1 vlan add 20

  • Задаём IP-адреса виртуальным интерфейсам:в соответствие с L3

inet ifconfig eth1.10 address 10.2.1.14 netmask 255.255.255.240 inet ifconfig eth1.20 address 10.2.2.1 netmask 255.255.255.128

  • Открываем для редактирования конфигурационный файл iplir.conf:

iplir config

  • в секции [adapter] с описанием интерфейса, к которому подключен коммутатор, присвойте параметру allowtraffic значение off:

[adapter] name= eth1 allowtraffic= off type= internal

  • добавляем секции [adapter], описывающие созданные виртуальные интерфейсы:

[adapter] name= eth1.10 allowtraffic= on type= internal [adapter] name= eth1.20 allowtraffic= on type= internal

  • Включите физический интерфейс, к которому подключен коммутаторпри этом автоматически будут включены созданные виртуальные интерфейсы

inet ifconfig eth1 up

  • Запустите управляющую службу

iplir start

  • Проверить:

fw-br.au.team# inet show vlan VLAN intefaces Id | Name | IP | Parent| Comment 10 | eth1.10 | 10.2.1.14 | eth1 | 20 | eth1.20 | 10.2.2.1 | eth1 | fw-br.au.team#

  • Назначаем IP на интерфейс в сторону RTR-BR:

inet ifconfig eth0 address 10.2.0.2 netmask 255.255.255.252

  • Проверить:

fw-br.au.team# inet show interface eth0 ---------- eth0: flags=4163 mtu 1500 inet 10.2.0.2 netmask 255.255.255.252 broadcast 10.2.0.3 ether bc:24:11:d5:35:70 txqueuelen 1000 (Ethernet) RX packets 86 bytes 6624 (6.4 KiB) RX errors 0 dropped 8 overruns 0 frame 0 TX packets 230 bytes 78456 (76.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 Configured by DHCP: no Class: access Link detected: yes fw-br.au.team# inet ping 10.2.0.1 Pinging 10.2.0.1, press Ctrl+C to cancel. PING 10.2.0.1 (10.2.0.1) 56(84) bytes of data. 64 bytes from 10.2.0.1: icmp_seq=1 ttl=64 time=17.7 ms 64 bytes from 10.2.0.1: icmp_seq=2 ttl=64 time=7.65 ms 64 bytes from 10.2.0.1: icmp_seq=3 ttl=64 time=7.78 ms ^C --- 10.2.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 7.659/11.066/17.752/4.728 ms fw-br.au.team#

  • Настраиваем OSPF:

inet ospf mode oninet ospf network add 10.2.0.0 netmask 255.255.255.252 area 1inet ospf network add 10.2.1.0 netmask 255.255.255.240 area 1 inet ospf network add 10.2.2.0 netmask 255.255.255.128 area 1

  • Добавляем правила в firewall:так как по заданию нет иных требований, разрешаем всё

firewall forward add 1 src @any dst @any pass firewall local add 1 src @any dst @any pass

  • Проверить:

fw-br.au.team# inet show ospf neighbour Neighbor ID Pri State Dead Time Address Interface RXmtL RqstL DBsmL 192.168.255.2 1 Full/DR 37.725s 10.2.0.1 eth0:10.2.0.2 0 0 0 fw-br.au.team# inet show routing Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, A - Babel, D - DHCP/PPP, > - selected route, * - FIB route Routing table MAIN (254): O>* 0.0.0.0/0 [110/10] via 10.2.0.1, eth0, 00:00:42 O 10.2.0.0/30 [110/10] is directly connected, eth0, 00:01:53 C>* 10.2.0.0/30 is directly connected, eth0 O 10.2.1.0/28 [110/10] is directly connected, eth1.10, 00:01:39 C>* 10.2.1.0/28 is directly connected, eth1.10 O 10.2.2.0/25 [110/10] is directly connected, eth1.20, 00:01:39 C>* 10.2.2.0/25 is directly connected, eth1.20 C>* 127.0.0.0/8 is directly connected, lo fw-br.au.team# inet ping 77.88.8.8 Pinging 77.88.8.8, press Ctrl+C to cancel. PING 77.88.8.8 (77.88.8.8) 56(84) bytes of data. 64 bytes from 77.88.8.8: icmp_seq=1 ttl=54 time=87.1 ms 64 bytes from 77.88.8.8: icmp_seq=2 ttl=54 time=86.3 ms 64 bytes from 77.88.8.8: icmp_seq=3 ttl=54 time=84.6 ms ^C --- 77.88.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 84.602/86.031/87.146/1.114 ms fw-br.au.team#

  • Настройка DHCP-сервера:

inet dhcp server add interface eth1.20 inet dhcp server add range 10.2.2.2 10.2.2.126 interface eth1.20 inet dhcp server add router 10.2.2.1 interface eth1.20 inet dhcp server add dns 10.1.1.10 interface eth1.20 inet dhcp server add domain au.team interface eth1.20 inet dhcp server start

  • Запуск DHCP-сервера:

inet dhcp server start inet dhcp server mode on

  • Проверить:

fw-br.au.team# inet show dhcp server DHCP server autostart is on DHCP server is started DHCP server interfaces eth1.20 DHCP server configuration: default-lease-time = 864000 max-lease-time = 864000 subnet 10.2.2.0 netmask 255.255.255.128 option subnet-mask = 255.255.255.128 option broadcast-address = 10.2.2.127 interface = eth1.20 range = 10.2.2.2 10.2.2.126 option routers = 10.2.2.1 option domain-name-servers = 10.1.1.10 option domain-name = au.team fw-br.au.team#

CLI-BR:

  • Выполняем коммутацию в соответствие с L2:
  • Результат:
  • Проверяем получение сетевых параметров:задаём также имя на устройство

su -hostnamectl set-hostname cli-br.au.team; exec bash

  • Результат:

Последнее изменение: среда, 18 марта 2026, 16:26

SW-COD:

  • Настройка имени:

hostnamectl set-hostname sw-cod.au.team; exec bash

  • Настройка пользователя:создаём пользователя

useradd net_admin

  • задаём пароль пользователю

passwd net_admin

  • должно получиться следующее

[root@sw-cod ~]# passwd net_admin passwd: updating all authentication tokens for user net_admin. You can now choose the new password or passphrase. A valid password should be a mix of upper and lower case letters, digits, and other characters. You can use a password containing at least 7 characters from all of these classes, or a password containing at least 8 characters from just 3 of these 4 classes. An upper case letter that begins the password and a digit that ends it do not count towards the number of character classes used. A passphrase should be of at least 3 words, 11 to 72 characters long, and contain enough different characters. Alternatively, if no one else can see your terminal now, you can pick this as your password: "Geneva+Clasp-Aside". Enter new password: Weak password: based on a dictionary word and not a passphrase. Re-type new password: passwd: all authentication tokens updated successfully.

  • Добавляем пользователя в группу wheel:

usermod -aG wheel net_admin

  • Настраиваем sudo для пользователя:

echo "net_admin ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers

  • Проверить:

sw-cod login: net_admin Password: [net_admin@sw-cod ~]$ sudo hostname -f sw-cod.au.team [net_admin@sw-cod ~]$ exit выход Welcome to ALT Server 11.0 (Mendelevium)!

  • Настройка временного IP для установки openvswitch:

ip addr add 172.16.1.0/23 dev ens19 ip route add 0.0.0.0/0 via 172.16.1.254 echo "nameserver 77.88.8.8" > /etc/resolv.conf

  • Устанавливаем пакет openvswitch:

apt-get update && apt-get install -y openvswitch

  • Включаем и добавляем в автозагрузку службу openvswitch:также реализуем сохранение настроек созданных средствами утилиты ovs-vsctlи перезагружаем виртуальную машину

systemctl enable --now openvswitch sed -i "s/OVS_REMOVE=yes/OVS_REMOVE=no/g" /etc/net/ifaces/default/options reboot

  • Настраиваем коммутацию:включаем все существующие сетевые интерфейсы

echo "TYPE=eth" > /etc/net/ifaces/ens19/options cp -r /etc/net/ifaces/ens{19,20}/ cp -r /etc/net/ifaces/ens{19,21}/ cp -r /etc/net/ifaces/ens{19,22}/ cp -r /etc/net/ifaces/ens19 /etc/net/ifaces/enp2s29 cp -r /etc/net/ifaces/ens19 /etc/net/ifaces/enp3s12 systemctl restart network

  • Проверить:

[root@sw-cod ~]# ip -c -br a lo UNKNOWN 127.0.0.1/8 ::1/128 ens19 UP fe80::be24:11ff:febf:d8fb/64 ens20 UP fe80::be24:11ff:fe41:8167/64 ens21 UP fe80::be24:11ff:fe0d:fa1f/64 ens22 UP fe80::be24:11ff:fe76:cab8/64 enp2s29 UP fe80::be24:11ff:fe7e:9a42/64 enp3s12 UP fe80::be24:11ff:fefd:469d/64

  • Создаём коммутатор с именем sw-cod:

ovs-vsctl add-br sw-cod

  • Добавляем все интерфейсы в коммутатор sw-cod:

ovs-vsctl add-port sw-cod ens19 ovs-vsctl add-port sw-cod ens20 ovs-vsctl add-port sw-cod ens21 ovs-vsctl add-port sw-cod ens22 ovs-vsctl add-port sw-cod enp2s29 ovs-vsctl add-port sw-cod enp3s12

  • Проверить:

[root@sw-cod ~]# ovs-vsctl show 43b9c49d-4803-4df5-9b65-bd8efab074d0 Bridge sw-cod Port enp2s29 Interface enp2s29 Port sw-cod Interface sw-cod type: internal Port ens19 Interface ens19 Port ens21 Interface ens21 Port ens22 Interface ens22 Port enp3s12 Interface enp3s12 Port ens20 Interface ens20 ovs_version: "3.3.8" [root@sw-cod ~]#

  • Создаём порт управления для назначения IP-адреса:

mkdir /etc/net/ifaces/mgmt cat < /etc/net/ifaces/mgmt/options TYPE=ovsport BOOTPROTO=static CONFIG_IPv4=yes BRIDGE=sw-cod EOF echo "172.16.1.0/23" > /etc/net/ifaces/mgmt/ipv4address echo "default via 172.16.1.254" > /etc/net/ifaces/mgmt/ipv4route echo "search au.team" > /etc/net/ifaces/mgmt/resolv.conf echo "nameserver 10.1.1.10" >> /etc/net/ifaces/mgmt/resolv.conf systemctl restart network