IPSec VPN ระหว่าง Amazon VPC และ Linux Server


9

ฉันกำลังพยายามตั้งค่าการเชื่อมต่อ IPSec VPN ระหว่างเครือข่ายองค์กรของเราและ Virtual Private Cloud ของ 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 ฉันสามารถ ping จุดปลายเฉพาะที่ (169.254.249.2/169.254.249.6) และรายการเทียบเท่าระยะไกล (169.254.249.1/169.254.249.5)
  • ฉันยังสามารถ ping อินสแตนซ์ใน VPC, SSH ให้กับพวกเขา ฯลฯ
  • จากอินสแตนซ์ระยะไกลใน VPC ฉันสามารถ ping อุปกรณ์ปลายทางและรีโมทปลายทางได้เช่นกัน
  • ฉันไม่สามารถ ping เซิร์ฟเวอร์ภายในบนซับเน็ต 10.3.0.0/25

ฉันคิดว่าฉันขาดอะไรง่ายๆไปแล้ว แต่ฉันได้ลองเพิ่มรายการใน ipsec-tools.conf เพื่อทำหน้าที่สะท้อน {local endpoint} <-> {remote subnet} โดยใช้ {local subnet} <-> {remote endpoint}, แต่ดูเหมือนจะไม่ทำงาน

เมื่อฉัน ping จาก {remote instance} ถึง {local server} เวลาในการส่ง Ping จะหมดไป แพ็กเก็ตสามารถมองเห็นได้บนอินเตอร์เฟส eth0 (แม้ว่าเครือข่ายโลคัลอยู่บน eth1)

Google ได้รับความช่วยเหลือเล็กน้อย มันแสดงเฉพาะคนที่พยายามใช้ OpenSwan หรือมีปัญหาที่คล้ายกัน แต่กับเราเตอร์ฮาร์ดแวร์หรือใช้เครื่องมือรุ่นเก่า


ฉันไม่มีความเชี่ยวชาญ แต่ดูเหมือนว่าจากที่นี่wiki.debian.org/IPsecที่คุณต้องเพิ่มเส้นทางไปยังเครือข่ายท้องถิ่นระยะไกลด้วยตนเองเมื่อใช้ ipsec ฉันอาจผิด แต่ ..
user993553

คำตอบ:


3

ฉันโกง :) ฉันติดตั้งเกตเวย์ของ Astaro ซึ่งได้รับการสนับสนุนอย่างเป็นทางการจาก Amazon แล้วใช้มันเพื่อสร้างแบบจำลองของฉันเอง คุณสามารถ SSH เข้าไปในหน่วย Astaro และดูว่าพวกเขาตั้งค่าทุกอย่างอย่างไร แน่นอนคุณสามารถติดกับหน่วย Astaro ถ้าคุณรู้สึกอยากจ่าย


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;

และเปลี่ยนแร็กคูนของฉันด้วยเช่นกัน:

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 ของคุณ (เช่นโดยการให้เซิร์ฟเวอร์มาตรฐานของคุณมีสองเส้นทางหนึ่งเส้นทางต่อแต่ละช่อง) ไม่เช่นนั้นหรือคุณทริกเกอร์การเฟลโอเวอร์ด้วยตนเองด้วยระบบการตรวจสอบบางประเภท วิธีการแก้ปัญหาก็ไม่ 'ดีที่สุด' แต่อย่างแรกคือให้ความซ้ำซ้อนในด้านของคุณเช่นกัน
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.