Как установить вложенный VPN-тоннель с использованием Strongswan?

Вопрос или проблема

У меня есть четыре хоста Ubuntu: два “внутренних” (B/C) и два “внешних” (A/D):

A --> B --> (ИНТЕРНЕТ) <-- C <-- D

Я уже успешно установил соединение IPSec между B и C. Однако я хочу добиться создания вложенного IPSec-туннеля между A и D так, чтобы туннель был установлен и поддерживался через туннель B/C.

У меня есть начальное понимание параметров swanctl.conf, поэтому я не совсем уверен, как это правильно реализовать.

В конечном итоге трафик инициатора от A к получателю D должен направляться через туннель B/C, однако, по-видимому, это маршрутизирование в конечном итоге устанавливается конфигурацией Strongswan.

Мои базовые конфигурации инициатора и получателя (B и C):

# Инициатор B
connections {
        inner_tunnel {
                remote_addrs = <публичный IP сервера C>

                version = 2
                proposals = aes256-sha512-x25519

                ppk_required = yes
                ppk_id = a2v-SoId7WN5Q19wptdaRWJp11EjPr1yYGWh8xlY62Q=

                children {
                        inner_tunnel {
                                local_ts = 192.168.108.103/24
                                remote_ts = 10.54.0.25/24
                                esp_proposals = aes256gcm12-x25519
                        }
                }

                local {
                        auth = psk
                }

                remote {
                        auth = psk
                }
        }
}

# Получатель C
connections {
        inner_tunnel {
                remote_addrs = %any
                pools = default_pool

                version = 2
                proposals = aes256-sha512-x25519

                ppk_required = yes

                children {
                        inner_tunnel {
                                remote_ts = 192.168.108.103/24
                                local_ts = 10.54.0.25/24
                                esp_proposals = aes256gcm12-x25519
                        }

                }

                local {
                        auth = psk
                        id = inner_hub
                }

                remote {
                        auth = psk
                }
        }
}

pools {
        default_pool {
                addrs = 10.1.30.0/24
        }
}

Ответ или решение

Для установления вложенного VPN туннеля при помощи StrongSwan между хостами A и D через уже существующий туннель между хостами B и C, необходимо правильно настроить конфигурации на всех четырех серверах. Следующий процесс поможет вам пошагово выполнить данную задачу.

1. Понимание архитектуры

У вас есть две пары хостов:

  • Внешние: A и D
  • Внутренние: B и C

Сначала вы уже установили IPSec соединение между B и C, а теперь требуется настроить дополнительное соединение между A и D, чтобы данные из A могли проходить через B и C.

2. Конфигурация StrongSwan для A и D

Конфигурация на хосте A

На хосте A вам нужно определить соединение на основе существующего туннеля между B и C.

# Настройка соединения на хосте A
connections {
    outer_tunnel {
        remote_addrs = <имя_или_IP_адрес_хоста_D>  # Замените на IP адрес D
        version = 2
        proposals = aes256-sha512-x25519
        ppk_required = yes
        ppk_id = a2v-SoId7WN5Q19wptdaRWJp11EjPr1yYGWh8xlY62Q=

        children {
            outer_tunnel {
                local_ts = 10.1.30.10/32  # Локальный IP A
                remote_ts = 10.1.30.20/32  # Локальный IP D
                esp_proposals = aes256gcm12-x25519
            }
        }

        local {
            auth = psk
        }

        remote {
            auth = psk
        }
    }
}

Конфигурация на хосте D

Теперь вам нужно выполнить аналогичные настройки на хосте D, чтобы он мог принимать соединение с хоста A.

# Настройка соединения на хосте D
connections {
    outer_tunnel {
        remote_addrs = %any
        version = 2
        proposals = aes256-sha512-x25519
        ppk_required = yes

        children {
            outer_tunnel {
                remote_ts = 10.1.30.10/32  # Локальный IP A
                local_ts = 10.1.30.20/32  # Локальный IP D
                esp_proposals = aes256gcm12-x25519
            }
        }

        local {
            auth = psk
            id = outer_hub
        }

        remote {
            auth = psk
        }
    }
}

3. Настройка маршрутов

Убедитесь, что маршруты корректно настроены, чтобы трафик от A к D проходил через B и C:

  • На хосте A:

    ip route add 10.1.30.0/24 via <IP_адрес_B>
  • На хосте B:
    Убедитесь, что хост B настроен на маршрутизацию трафика из A в C и обратно.

  • На хосте C:
    Аналогично, настройте C для маршрутизации трафика от B к D.

  • На хосте D:
    Также удостоверьтесь, что D знает, как отправлять ответные пакеты на IP-адрес A через C.

4. Проверка соединения

После завершения всех настроек перезапустите StrongSwan на каждом из хостов и выполните проверку состояния соединений:

swanctl --list-conns

Убедитесь, что все соединения активны, и просмотрите журналы на предмет возможных ошибок:

sudo journalctl -u strongswan

Заключение

Создание вложенного VPN туннеля с помощью StrongSwan требует внимательного подхода к конфигурации и маршрутам. Помните о необходимой безопасности (использование PSK и проверка ключей) и обязательно проводите тесты после каждой настройки. С успешным выполнением всех шагов вы сможете установить надежное соединение между хостами A и D через туннель B/C.

Оцените материал
Добавить комментарий

Капча загружается...