Задача:

  • Настройка динамической трансляции адресов
    • Настройте динамическую трансляцию адресов средствами Ansible для группы серверов RTR1
      • В качестве плейбука используйте файл playbook_1.yml в каталоге project_1
      • Плейбук должен содержать действия по настройке динамической трансляцию адресов
        • Используйте firewalld
        • Для внешнего интерфейса используйте зону external
        • Обеспечьте автоматическое восстановление правил после перезагрузки
        • Использование плагина shell и command НЕ допускается
          • Использование запрещенных плагинов обнулит весь пункт при проверке
    • Настройте динамическую трансляцию адресов средствами Ansible для группы серверов RTR2
      • В качестве плейбука используйте файл playbook_2.yml в каталоге project_1
      • Плейбук должен содержать действия по настройке динамической трансляцию адресов
        • Используйте iptables
        • Обеспечьте автоматическое восстановление правил после перезагрузки
        • Использование плагина shell и command НЕ допускается
          • Использование запрещенных плагинов обнулит весь пункт при проверке

Вариант реализации:

CLI1:

  • Из под пользователя user переходим в директорию /opt/ansible:
cd /opt/ansible
  • Создаём первый playbook_1.yml в директории project_1:
vim project_1/playbook_1.yml
    • Содержимое playbook_1.yml:
      • данный playbook - выполняет следующее:
        • Включает перессылку пакетов (forwarding);
        • Устанавливаем firewalld если он не установлен;
        • Добавляет внешний интерфейс enp0s3 в зону external (masquerade - включён из коробки на данной зоне);
        • Добавляет внутрений интерфейс enp0s8 в зону trusted;
---
- name: Setting up dynamic address translation
  hosts: RTR1
  become: true

  tasks:
    - name: Set ip forwarding on in /proc and in the sysctl file and reload necessary
      ansible.posix.sysctl:
        name: net.ipv4.ip_forward
        value: "1"
        sysctl_set: true
        state: present
        reload: true

    - name: Install Firewalld
      ansible.builtin.dnf:
        name: firewalld
        state: present

    - name: Started and enabled Firewalld
      service:
        name: firewalld
        state: started
        enabled: true

    - name: Distribution of interfaces to the corresponding zones
      firewalld:
        zone: "{{ item.zone }}"
        interface: "{{ item.interface }}"
        permanent: true
        state: enabled
        immediate: yes
      with_items:
        - { zone: external, interface: enp0s3 }
        - { zone: trusted, interface: enp0s8 }
  • Устанавливаем необходимую для работу ansible - коллекцию:
    • из под пользователя user
ansible-galaxy collection install ansible.posix
  • Выполняем запуск playbook - сценария:
    • из под пользователя user
ansible-playbook project_1/playbook_1.yml
    • Результат:

  • Проверяем:
    • подключаемся по SSH на RTR1 - смотрим forwarding и зоны firewalld:

    • c SRV1 или CLI1 - можно проверить доступ в сеть Интернет:

  • Создаём второй playbook_2.yml в директории project_1:
vim project_1/playbook_2.yml
    • Содержимое playbook_2.yml:
      • данный playbook - выполняет следующее:
        • Включает перессылку пакетов (forwarding);
        • Устанавливаем iptables если он не установлен;
        • Настраиваем правила для NAT средствами iptables;
        • Сохраняем созданные правила;
---
- name: Setting up dynamic address translation
  hosts: RTR2
  become: true 

  tasks:
    - name: Set ip forwarding on in /proc and in the sysctl file and reload necessary
      ansible.posix.sysctl:
        name: net.ipv4.ip_forward
        value: "1"
        sysctl_set: true
        state: present
        reload: true

    - name: Install Iptables
      ansible.builtin.apt:
        name: iptables
        state: present
        update_cache: yes

    - name: Turn on masquerade
      ansible.builtin.iptables:
        table: nat
        chain: POSTROUTING
        jump: MASQUERADE
        out_interface: eth0
        protocol: all
        source: 192.168.100.0/24
        destination: 0.0.0.0/0

    - name: Save current state of the iptables in system file
      community.general.iptables_state:
        state: saved
        path: /etc/iptables.rules

    - name: Enable auto-loading of rules iptables
      ansible.builtin.lineinfile:
        path: /etc/network/interfaces
        line: pre-up iptables-restore < /etc/iptables.rules
        state: present
  • Устанавливаем необходимую для работу ansible - коллекцию:
    • из под пользователя user
ansible-galaxy collection install community.general
  • Выполняем запуск playbook - сценария:
    • из под пользователя user
ansible-playbook project_1/playbook_2.yml
    • Результат:

  • Проверяем:
    • подключаемся по SSH на RTR2 - смотрим forwarding и правила iptables:

    • c SRV2 или CLI2 - можно проверить доступ в сеть Интернет:

Последнее изменение: вторник, 9 июля 2024, 15:07