IPSec VPN между Amazon VPC и Linux Server

9

Я пытаюсь установить VPN-соединение IPSec между нашей корпоративной сетью и виртуальным частным облаком Amazon, используя их систему VPN и сервер Linux. К сожалению, единственное руководство, которое я нашел, обсуждает, как настроить туннель, используя хост-машину Linux и получить эту машину linux для доступа к экземплярам VPC, но я не могу найти в Интернете обсуждения о том, как получить экземпляр для доступа к корпоративной сети. (или остальной интернет через эту сеть).

Сетевая информация

Local subnet: 10.3.0.0/25
Remote subnet: 10.4.0.0/16

Tunnel 1:
  Outside IP Addresses:
    - Customer Gateway:        : 199.167.xxx.xxx
    - VPN Gateway              : 205.251.233.121

  Inside IP Addresses
    - Customer Gateway         : 169.254.249.2/30
    - VPN Gateway              : 169.254.249.1/30

Tunnel 2:
  Outside IP Addresses:
    - Customer Gateway:        : 199.167.xxx.xxx
    - VPN Gateway              : 205.251.233.122

  Inside IP Addresses
    - Customer Gateway         : 169.254.249.6/30
    - VPN Gateway              : 169.254.249.5/30

Вот мой /etc/ipsec-tools.conf:

flush;
spdflush;

spdadd 169.254.249.2/30 169.254.249.1/30 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

spdadd 169.254.249.1/30 169.254.249.2/30 any -P in ipsec
   esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;

spdadd 169.254.249.6/30 169.254.249.5/30 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

spdadd 169.254.249.5/30 169.254.249.6/30 any -P in ipsec
   esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;



spdadd 169.254.249.2/30 10.4.0.0/16 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

spdadd 10.4.0.0/16 169.254.249.2/30 any -P in ipsec
   esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;

spdadd 169.254.249.6/30 10.4.0.0/16 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

spdadd 10.4.0.0/16 169.254.249.6/30 any -P in ipsec
   esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;

Вот мой /etc/racoon/racoon.conf:

remote 205.251.233.122 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

remote 205.251.233.121 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

sainfo address 169.254.249.2/30 any address 169.254.249.1/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

sainfo address 169.254.249.6/30 any address 169.254.249.5/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

BGP работает нормально, поэтому я не собираюсь публиковать эти конфиги.

Вот что работает

  • Из окна Linux я могу пропинговать локальные конечные точки (169.254.249.2/169.254.249.6) и их удаленные эквиваленты (169.254.249.1/169.254.249.5).
  • Я также могу пинговать экземпляры в VPC, SSH к ним и т. Д.
  • Из удаленных экземпляров в VPC я также могу пропинговать локальные и удаленные конечные точки
  • Я не могу пропинговать локальные серверы в подсети 10.3.0.0/25

Я предполагаю, что упускаю что-то простое, но я попытался добавить записи в ipsec-tools.conf, чтобы отразить {локальную конечную точку} <-> {удаленную подсеть}, используя {локальную подсеть} <-> {удаленная конечная точка}, но это не сработало.

Когда я пинг с {удаленного экземпляра} на {локальный сервер}, тайм-аут пинг. Пакеты видны на интерфейсе eth0 (даже если локальная сеть находится на eth1).

Google мало чем помог; он показывает только людей, пытающихся использовать OpenSwan или имеющих похожие проблемы, но с аппаратными маршрутизаторами, или использующих более старые инструменты.

Дэн Удей
источник
Я не эксперт, но, кажется, отсюда wiki.debian.org/IPsec, что вам нужно вручную добавлять маршруты в удаленную локальную сеть при использовании ipsec, но я могу ошибаться ..
user993553

Ответы:

3

Ну, я обманул :) Я установил шлюз Astaro, который официально поддерживается Amazon, а затем использовал его для моделирования своего собственного. Вы можете просто подключиться по SSH к устройству Astaro и посмотреть, как они все настроили. Конечно, вы можете придерживаться устройства Astaro, если хотите заплатить за него.

Petter
источник
1
Не могли бы вы уточнить ваше решение? Что ты имеешь в виду под "модель моей"? Я застрял на той же проблеме, и мне было бы интересно, как вы ее решили, спасибо!
Макс
3

Догадаться. Пришлось изменить мой ipsec-tools.conf на это:

flush;
spdflush;

# Generic routing
spdadd 10.4.0.0/16 10.3.0.0/25 any -P in  ipsec esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;
spdadd 10.3.0.0/25 10.4.0.0/16 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

# Tunnel 1
spdadd 169.254.249.1/30 169.254.249.2/30 any -P in  ipsec esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;
spdadd 169.254.249.2/30 169.254.249.1/30 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

spdadd 10.4.0.0/16 169.254.249.2/30 any -P in  ipsec esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;
spdadd 169.254.249.2/30 10.4.0.0/16 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

# Tunnel 2
spdadd 169.254.249.5/30 169.254.249.6/30 any -P in  ipsec esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;
spdadd 169.254.249.6/30 169.254.249.5/30 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

spdadd 10.4.0.0/16 169.254.249.6/30 any -P in  ipsec esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;
spdadd 169.254.249.6/30 10.4.0.0/16 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

И измените мой racoon.conf на это:

path pre_shared_key "/etc/racoon/psk.txt";

remote 205.251.233.122 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

remote 205.251.233.121 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

sainfo address 169.254.249.2/30 any address 169.254.249.1/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

sainfo address 169.254.249.6/30 any address 169.254.249.5/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

sainfo address 10.3.0.0/25 any address 10.4.0.0/16 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

Однако эта конфигурация, насколько я понимаю, будет направлять трафик только между 10.3.0.0/25 и 10.4.0.0/16 по первому туннелю (через xxx121). Я уточню ответ, когда выясню это.

Дэн Удей
источник
Я также застрял с этой проблемой на некоторое время, и ваш ответ действительно помог. Вы придумали решение для маршрутизации по обоим туннелям? Я добавил части «Общая маршрутизация» с другим IP-адресом туннеля, но не проверял его.
Будет
Я не нашел хорошего решения для маршрутизации через оба туннеля, но я думаю, что это имеет смысл в одном контексте. Идея здесь состоит в том, чтобы обеспечить избыточность, и в идеале это должно включать избыточность на обоих концах. Вы можете настроить отдельный сервер во втором туннеле и предоставить два маршрута для ваших VPN (например, предоставив вашим стандартным серверам два маршрута, по одному на каждый ящик). Либо так, либо вы запускаете аварийное переключение вручную с какой-то системой мониторинга. Ни одно из решений не является «оптимальным», но первое обеспечивает избыточность и на вашей стороне.
Дэн Удей
0

Вы знаете причину использования «require» вместо «use» для настройки setkey? Вы также знаете, имеет ли это значение, в каком порядке я размещаю операторы в разделах remote и sainfo и ошибочно дублирую определенные операторы? Например:

#original
remote 205.251.233.121 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

против

#edited
remote 205.251.233.121 {
        generate_policy off;                           #moved/duplicated
        lifetime time 28800 seconds;
        proposal {
                dh_group 2;                           #moved
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
        }
         exchange_mode main;                      #moved
        generate_policy off;                   #duplicated/moved
}

Вы также выяснили, как заставить трафик проходить по обоим туннелям?

Спасибо за любые рекомендации.

DPfiler
источник
Добро пожаловать в Serverfault. Похоже, вы пытаетесь задать вопрос в разделе ответов на вопрос другого автора. Если у вас есть новый вопрос, опубликуйте его как новый вопрос, перейдя на serverfault.com и нажав большую красную кнопку «Задать вопрос».
19
Я буду благодарен за продолжение.
DPfiler