Score:0

กำหนดเส้นทางการรับส่งข้อมูลผ่านอุโมงค์ IPSec ด้วยโฮสต์เกตเวย์

ธง pk

พิจารณาจาก วิกิหงส์แกร่งนี่ดูเหมือนจะเป็นปัญหามาตรฐาน แต่ฉันไม่สามารถทำให้มันทำงานได้ถูกต้อง

เค้าโครงเครือข่าย

เค้าโครงเครือข่าย

เว็บไซต์ท้องถิ่น (ลูกค้า และ ประตู) อยู่ภายใต้การควบคุมของฉัน ไซต์ระยะไกล (เกตเวย์ระยะไกล และ เซิร์ฟเวอร์ระยะไกล) ไม่ใช่. อุโมงค์ IPSec คือ แยกอุโมงค์ ดังกล่าวเท่านั้นที่ร้องขอไปยัง 10.10.0.0/16 เครือข่ายย่อยจะถูกส่งผ่านอุโมงค์ IPSec

เป้าหมาย

ฉันต้องการ ลูกค้า เพื่อสื่อสารกับ เซิร์ฟเวอร์ระยะไกล, เช่น. สร้าง จุ๊ๆ หรือ ก สบ การเชื่อมต่อ.

สิ่งที่ฉันทำไปแล้ว

  • ฉันได้สร้างอุโมงค์ IPSec ระหว่าง ประตู และ เกตเวย์ระยะไกล.

  • ฉันได้เปิดใช้งานการส่งต่อ ip บน ประตู:

    sysctl net.ipv4.ip_forward=1
    
  • ฉันได้สร้าง NAT บน ประตู:

    iptables -t nat -I POSTROUTING -m นโยบาย --pol ipsec --dir out -j ยอมรับ
    iptables -t nat -A โพสต์ -j MASQUERADE
    
  • บน ลูกค้า ฉันได้กำหนดเส้นทางการจราจรผ่าน ประตู:

    เส้นทาง ip เดลเริ่มต้น
    เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 192.168.144.4
                           # 192.168.144.4 เป็นเกตเวย์
    

ทำงานอะไร

  • อุโมงค์ IPSec ถูกสร้างขึ้นและมีเสถียรภาพ
  • เมื่อล็อคอินเข้าสู่ ประตู, ฉันสามารถ ปิง เดอะ เกตเวย์ระยะไกล และ เซิร์ฟเวอร์ระยะไกล เรียบร้อยแล้ว ฉันยังสามารถ ปิง เดอะ ลูกค้า. และฉันทำได้ ping google.com.
  • เมื่อล็อคอินเข้าสู่ ลูกค้า, ฉันสามารถ ping google.com และฉันทำได้ ปิง เดอะ ประตู. กับ tcpdump icmp บน ประตู ฉันเห็นว่า ping google.com จาก ลูกค้า กำลังจะผ่านไป ประตู.

ยังไม่ได้ผลอะไร

ฉันไม่สามารถ ปิง เดอะ เซิร์ฟเวอร์ระยะไกล จาก ลูกค้า โดย IP ของมัน

ลูกค้า$ ping -c 1 10.10.12.7
PING 10.10.12.7 (10.10.12.7): 56 ไบต์ข้อมูล

--- สถิติ ping 10.10.12.7 ---
ส่ง 1 แพ็กเก็ต ได้รับ 0 แพ็กเก็ต สูญเสียแพ็กเก็ต 100%

จาก tcpdump บน ประตูดูเหมือนว่า ปิง ถูกส่งแต่ไม่ได้ส่งต่อผ่านอุโมงค์:

เกตเวย์ $ tcpdump icmp
13:19:18.122999 IP 192.168.144.7 > 10.10.12.7: คำขอเสียงสะท้อน ICMP, id 15, seq 0, ความยาว 64
13:19:18.123038 เกตเวย์ IP > 10.10.12.7: คำขอเสียงสะท้อน ICMP, id 15, seq 0, ความยาว 64
13:19:18.127534 IP ac5.nue3.m-online.net > เกตเวย์: ICMP net 10.10.12.7 ไม่สามารถเข้าถึงได้ ความยาว 36
13:19:18.127556 ​​IP ac5.nue3.m-online.net > 192.168.144.7: ICMP net 10.10.12.7 ไม่สามารถเข้าถึงได้ ความยาว 36

เนื่องจาก ac5.nue3.m-online.net เป็นผู้ให้บริการอินเทอร์เน็ตของไซต์ท้องถิ่น ฉันคิดว่าแพ็กเก็ตไม่ได้ถูกกำหนดเส้นทางผ่านอุโมงค์ IPSec แต่ผ่านการเชื่อมต่ออินเทอร์เน็ตของ ประตูซึ่งแน่นอนว่าไม่สามารถเข้าถึง เซิร์ฟเวอร์ระยะไกล. (หากฉันทำให้อุโมงค์ IPSec เป็นอุโมงค์เต็มแทนที่จะเป็นอุโมงค์แยก ฉันจะได้ผลลัพธ์เดียวกัน)

ความช่วยเหลือหรือข้อมูลเชิงลึกใด ๆ ที่จะได้รับการชื่นชมจริง ๆ !

แก้ไข: ipsec สถานะทั้งหมด บน ประตู

เกตเวย์> สถานะ ipsec ทั้งหมด
สถานะของ IKE charon daemon (strongSwan 5.8.2, Linux 5.4.0-88-generic, x86_64):
  เวลาทำงาน: 7 นาที ตั้งแต่ 08 ต.ค. 08:18:24 น. 2021
  malloc: sbrk 3112960, mmap 0, ใช้ 1081456, ฟรี 2031504
  เธรดผู้ปฏิบัติงาน: 11 จาก 16 ไม่ได้ใช้งาน, 5/0/0/0 ทำงาน, คิวงาน: 0/0/0/0, กำหนดเวลา: 4
  ปลั๊กอินที่โหลดแล้ว: การทดสอบเวกเตอร์ charon ldap pkcs11 tpm aesni aes rc2 sha2 sha1 md5 mgf1 rdrand สุ่ม nonce x509 ข้อจำกัดการเพิกถอน pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem opensl gcrypt af-alg fips-prf gmp curve25519 ตัวแทน chapoly xcc bc cmac hcm cmc hcm ntru drbg curl attr kernel-netlink แก้ไขซ็อกเก็ตเริ่มต้น connmark farp stroke updown eap-identity eap-aka eap-md5 eap-gtc eap-mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap eap-tnc xauth- ทั่วไป xauth-eap xauth-pam tnc-tnccs dhcp lookip แจ้งข้อผิดพลาด certexpire นำตัวนับ addrblock ความสามัคคี
ที่อยู่ IP ที่รับฟัง:
  192.168.144.4
การเชื่อมต่อ:
ตัวอย่าง ipsec: %any...vpn1.example.com IKEv2, dpddelay=300s
example-ipsec: local: [[email protected]] ใช้การรับรองความถูกต้องของคีย์ที่ใช้ร่วมกันล่วงหน้า
ตัวอย่าง ipsec: ระยะไกล: [[email protected]] ใช้การรับรองความถูกต้องของคีย์ที่ใช้ร่วมกันล่วงหน้า
ตัวอย่าง ipsec: เด็ก: ไดนามิก === 0.0.0.0/0 TUNNEL, dpdaction=clear
สมาคมความปลอดภัย (1 ขึ้น 0 เชื่อมต่อ):
example-ipsec[1]: ก่อตั้งเมื่อ 7 นาทีที่แล้ว, 192.168.144.4[[email protected]]...<public-ip-of-the-remote-gateway>[[email protected]]
ตัวอย่าง-ipsec[1]: I: 9d7c74f670bbda86_i* c12b3b4a236b7018_r, การตรวจสอบสิทธิ์คีย์ที่แชร์ล่วงหน้าอีกครั้งใน 2 ชั่วโมง
ตัวอย่าง ipsec[1]: ข้อเสนอ IKE: AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
ตัวอย่าง ipsec{1}: ติดตั้ง, อุโมงค์, reqid 1, ESP ใน UDP SPI: cf66ad72_i af3c9348_o
example-ipsec{1}: AES_CBC_256/HMAC_SHA2_256_128, 442 bytes_i (4 pkts, 434s ที่แล้ว), 485 bytes_o (6 pkts, 433s ที่แล้ว), คีย์ใหม่ใน 38 นาที
ตัวอย่าง ipsec{1}: 10.10.102.235/32 === 0.0.0.0/0

นี่คือผลลัพธ์ของ ipsec สถานะทั้งหมด บน ประตู หลังจากส่งไม่สำเร็จ ปิง จาก ลูกค้า ไปที่ เซิร์ฟเวอร์ระยะไกล. เดอะ ปิง จาก ประตู ไม่เปลี่ยน "ไบต์" ในเอาต์พุต "ไบต์" ในเอาต์พุตสอดคล้องกับ ปิง ฉันได้ส่งจาก ประตู ไปที่ เซิร์ฟเวอร์ระยะไกล.

แก้ไข: /etc/ipsec.conf บน ประตู:

# /etc/ipsec.conf

ตัวอย่าง conn-ipsec
  ซ้าย = %defaultroute
  leftsourceip = %การกำหนดค่า
  leftid = "[email protected]"
  ขวา = vpn1.example.com
  rightid = "[email protected]"
  rightsubnet = 0.0.0.0/0
  ไฟร์วอลล์ซ้าย = ใช่
  นโยบายการติดตั้ง = ใช่
  การแลกเปลี่ยนคีย์ = ikev2
  พิมพ์ = อุโมงค์
  อัตโนมัติ = เริ่มต้น
  leftauth = psk
  ความถูกต้อง = psk
  dpdaction = ชัดเจน
  dpddelay = 300 วินาที
cn flag
ตัวเลือกการรับส่งข้อมูลในท้องถิ่นที่เจรจาไว้สำหรับ `เกตเวย์' คืออะไร (เช่น โพสต์เอาต์พุตสถานะของ strongSwan ไม่ว่าจะเป็น `ipsec statusall` หรือ `swanctl -l`)
pk flag
ขอบคุณ @ecdsa ฉันได้โพสต์ผลลัพธ์ของ `ipsec statusall` แล้ว
pk flag
โอ้ ฉันคิดว่าคุณอาจจะทำอะไรบางอย่าง! หากบรรทัดสุดท้ายของเอาต์พุต `ipsec statusall` เป็นตัวเลือกการรับส่งข้อมูลด้วย อาจไม่ตรงกับ NAT ของฉัน แต่ที่จริงแล้ว ฉันไม่รู้ว่าช่วง `10.10.102.235/32` นี้มาจากไหน เพราะไม่ได้มาจากการกำหนดค่าของฉันเอง บางทีนี่อาจเป็นตัวเลือกที่กำหนดโดยเกตเวย์ระยะไกล :/
pk flag
แค่นั้นแหละ @ecdsa ฉันได้เพิ่ม `iptables -t nat -A POSTROUTING -j SNAT --to-source 10.10.102.235; iptables -t nat -A POSTROUTING -m policy --dir out --pol ipsec -j ACCEPT` (นำมาใช้จาก https://wiki.strongswan.org/issues/2355) จากนั้นก็ใช้งานได้! คุณสนใจที่จะเขียนคำตอบที่ถูกต้องหรือไม่?
drookie avatar
za flag
ดูเหมือนว่าคุณกำหนดค่าตัวเลือกการรับส่งข้อมูลไม่ถูกต้อง เพิ่มการกำหนดค่าบางอย่างเกี่ยวกับสิ่งนี้
pk flag
ขอบคุณ @drookie ฉันได้เพิ่ม `/etc/ipsec.conf` แล้ว
Score:1
ธง cn

เนื่องจากการเชื่อมต่อใช้ที่อยู่ IP เสมือน (leftsourceip=%การกำหนดค่าซึ่งส่งผลให้ 10.10.102.235/32 เป็นตัวเลือกทราฟฟิกในเครื่อง) คุณต้อง NAT ทราฟฟิกไปยังที่อยู่นั้น ไม่ใช่ที่อยู่จริงของโฮสต์ที่คุณได้รับผ่าน สวมหน้ากากเพื่อให้ตรงกับนโยบาย IPsec และอุโมงค์การรับส่งข้อมูล (-ฉัน เพื่อใส่ไว้ด้านบน):

iptables -t nat -I POSTROUTING -j SNAT --to-source 10.10.102.235

หากไม่ได้กำหนด IP เสมือนแบบคงที่ (เช่นขึ้นอยู่กับตัวตนของไคลเอ็นต์) และอาจเปลี่ยนแปลง คุณสามารถติดตั้ง/ลบกฎ SNAT แบบไดนามิกในไฟล์ สคริปต์อัพดาวน์ที่กำหนดเอง (กำหนดค่าผ่าน ซ้ายขึ้นลง) ที่ IP เสมือนถูกส่งผ่านไป $PLUTO_MY_SOURCEIP.

อย่างที่คุณบอกในตอนแรกว่านี่จะเป็นการตั้งค่าการแยกอุโมงค์ (ซึ่งตัวเลือกการรับส่งข้อมูลระยะไกลของ 0.0.0.0/0 ไม่สะท้อนจริง) คุณสามารถเพิ่มเช่น -d 10.10.0.0/16 ไปที่กฎ SNAT เพื่อประมวลผลแพ็กเก็ตไปยังซับเน็ตนั้นเท่านั้น ทราฟฟิกอื่นจะไม่ได้รับการแนทและทันเนล (คุณสามารถเก็บ สวมหน้ากาก กฎจราจรนั้นๆ). นอกจากนี้ยังสามารถบังคับใช้ผ่านนโยบาย IPsec (rightsubnet=10.10.0.0/16) ซึ่งคุณก็เข้าไปได้ $PLUTO_PEER_CLIENT ในสคริปต์อัพดาวน์

pk flag
ขอบคุณมากสำหรับความช่วยเหลือและคำตอบที่ยอดเยี่ยมนี้ ซึ่งไม่เพียงแสดงสิ่งที่ต้องทำ แต่ยังบอกเหตุผลว่าทำไมถึงต้องทำ!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา