Amazon VPC와 Linux 서버 간의 IPSec VPN


9

VPN 시스템과 Linux 서버를 사용하여 회사 네트워크와 Amazon Virtual Private Cloud간에 IPSec VPN 연결을 설정하려고합니다. 불행히도, 내가 찾은 유일한 가이드는 호스트 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)를 ping 할 수 있습니다.
  • 또한 VPC에서 인스턴스를 핑 (Ping) 할 수도 있고 SSH로 연결할 수도 있습니다.
  • VPC의 원격 인스턴스에서 로컬 및 원격 엔드 포인트도 핑할 수 있습니다.
  • 10.3.0.0/25 서브넷에서 로컬 서버를 ping 할 수 없습니다

나는 간단한 것을 놓치고 있다고 가정하지만 {local subnet} <-> {remote endpoint}을 사용하여 {local endpoint} <-> {remote subnet}을 미러링하기 위해 ipsec-tools.conf에 항목을 추가하려고 시도했습니다. 그러나 작동하지 않는 것 같습니다.

{remote instance}에서 {local server}로 핑하면 핑 시간이 초과됩니다. 로컬 네트워크가 eth1에 있더라도 패킷은 eth0 인터페이스에서 볼 수 있습니다.

구글은 거의 도움이되지 않았다. OpenSwan을 사용하려고하거나 유사한 문제가 있지만 하드웨어 라우터 또는 이전 도구를 사용하는 사람 만 표시합니다.


나는 전문가가 아니지만 여기에서 wiki.debian.org/IPsec 에서 ipsec을 사용할 때 원격 로컬 네트워크에 경로를 수동으로 추가해야한다고 생각합니다.
user993553

답변:


3

음, 나는 바람을 피웠다 :) 나는 아마존에서 공식적으로 지원하는 Astaro 게이트웨이를 설치하고 그것을 사용하여 내 자신을 모델링했다. Astaro 장치에 SSH로 연결하여 모든 것이 어떻게 설정되어 있는지 확인할 수 있습니다. 물론 비용을 지불하고 싶다면 Astaro 장치를 사용할 수 있습니다.


1
솔루션에 대해 자세히 설명해 주시겠습니까? "나만의 모델"이란 무엇입니까? 나는 같은 문제에 갇혀 있으며 어떻게 해결했는지에 관심이 있습니다. 감사합니다!
Max

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;
}

그러나 내가 알기 로이 구성은 첫 번째 터널 (xxx121을 통해) 10.3.0.0/25와 10.4.0.0/16 사이의 트래픽 만 라우팅합니다. 내가 알아낼 때 대답을 업데이트 할 것입니다.


나는 또한이 문제에 잠시 동안 붙어 있었고 귀하의 답변이 실제로 도움이되었습니다. 두 터널을 통한 라우팅을위한 솔루션을 생각해 보셨습니까? 다른 터널 IP에 '일반 라우팅'부품을 추가했지만 테스트하지는 않았습니다.

두 터널을 통한 라우팅에 대한 좋은 해결책을 찾지 못했지만 한 가지 맥락에서 의미가 있다고 생각합니다. 여기서 아이디어는 중복성을 제공하는 것이며 이상적으로는 양쪽 끝에 중복성을 포함하는 것입니다. 두 번째 터널에 별도의 서버를 설정하고 VPN에 대한 두 개의 경로를 제공 할 수 있습니다 (예 : 표준 서버에 두 개의 경로를 각 상자마다 제공). 또는 일종의 모니터링 시스템으로 수동 장애 조치를 트리거합니다. 두 솔루션 모두 실제로 '최적'은 아니지만 첫 번째 솔루션은 중복성을 제공합니다.
Dan Udey

0

setkey 구성에 "사용"대신 "필수"를 사용해야하는 이유를 알고 있습니까? 또한 원격 및 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;
}

vs

#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
}

두 터널 모두에서 트래픽을 전달하는 방법도 알아 보셨습니까?

안내해 주셔서 감사합니다.


Serverfault에 오신 것을 환영합니다. 다른 포스터 질문의 답변 섹션에서 질문을하려는 것 같습니다. 새로운 질문이있는 경우 serverfault.com 으로 이동 하여 큰 빨간색 "질문하기"버튼을 클릭하여 새로운 질문으로 게시하십시오 .
vjones

후속 조치에 감사드립니다.
DPfiler
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.