Score:1

StrongSwan swanctl/xfrm: วิธีปลอมแปลงการรับส่งข้อมูลในอุโมงค์

ธง cn
  • อูบุนตู 20.04LTS
  • strongSwan swanctl 5.8.2
  • ลินุกซ์ 5.8.0-1035-gcp

ฉันกำลังพยายามตั้งค่า VPN "roadwarrior" ของ IKEv2 ที่เลื่อนการรับรองความถูกต้องของรัศมีไปยังเซิร์ฟเวอร์อัปสตรีมของเรา ข่าวดีก็คือฉัน สามารถ รับลูกค้าเพื่อเชื่อมต่อและผ่าน RADIUS auth แต่ฉันได้พยายามเกี่ยวกับสิ่งที่เป็นล้าน แต่ฉัน ไม่ได้ รับแพ็คเก็ตเพื่อส่งต่อ ฉันเห็นการจราจรที่มาถึงในอุโมงค์ แต่จะไม่ NAT ขาออก สังเกตความพยายามของฉันในสคริปต์ updown เพื่อพยายามรับส่งข้อมูล NAT ไม่มีประโยชน์ (ขณะนี้ถูกแสดงความคิดเห็น)

นี่คือการกำหนดค่า:

sudo tee /etc/strongswan.d/charon-systemd.conf << "EOF"
charon-systemd {
# install_virtual_ip=ไม่
# install_routes = 0
  โหลด = สุ่ม nonce aes sha1 sha2 hmac pem pkcs1 x509 revocation curve25519 gmp curl kernel-netlink socket-default updown vici eap-radius eap-identity
  วารสาร {
   # Loglevel สำหรับระบบย่อยเฉพาะ
   # <ระบบย่อย> = <ค่าเริ่มต้น>
   # ระดับบันทึกเริ่มต้น
   ค่าเริ่มต้น=2
   เข้ารหัส=1
   asn=1
  }

  ปลั๊กอิน {
    eap-รัศมี {
      เซิร์ฟเวอร์ {
        หลัก {
          ที่อยู่=10.128.0.13
          ความลับ = ความลับสุดยอด
          auth_port=21812
        }
      }
    }
  }
}
อฟ

sudo ที /etc/swanctl/conf.d/vpn.conf << "EOF"
การเชื่อมต่อ {
  rw-eap {
    รุ่น=2
    ข้อเสนอ = aes128gcm16-sha256-modp2048
    local_addrs=10.128.0.14
    send_cert=เสมอ
    พูล=dhcp_ipv4
    ท้องถิ่น {
      auth=pubkey
      certs=vpn.pem
      id=vpn.xxx.com
    }
    ระยะไกล {
      auth=eap-รัศมี
      รหัส=*
    }
    เด็ก {
      สุทธิ {
        local_ts=0.0.0.0/0
        remote_ts=172.16.20.64/26
        if_id_in=%ไม่ซ้ำกัน
        if_id_out=%ไม่ซ้ำกัน
        mark_in=% ไม่ซ้ำกัน
        mark_out=%ไม่ซ้ำกัน
        updown=/usr/local/bin/rw-updown.sh
        esp_proposals=aes128gcm16-sha256-modp2048
      }
    }
  }
}
สระว่ายน้ำ {
  dhcp_ipv4 {
    แอดเดรส=172.16.20.64/26
    DNS=10.128.0.9
  }
}
อฟ

ที /usr/local/bin/rw-updown.sh << "EOF"
#!/bin/bash

ชุด -o ชุดคำนาม
ตั้งค่า -o errexit

XFRM_IF="xfrm${PLUTO_UNIQUEID}"

กรณี "${PLUTO_VERB}" ใน
    up-client)
        คนตัดไม้ -t "vpn rw-updown" ${PLUTO_VERB} ${PLUTO_UNIQUEID} ${XFRM_IF} ${PLUTO_ME} ${PLUTO_PEER} ${PLUTO_MARK_OUT%%/*} ${PLUTO_PEER_SOURCEIP}
        ip link เพิ่ม ${XFRM_IF} พิมพ์ xfrm dev ens4 if_id ${PLUTO_UNIQUEID}
        ลิงก์ ip ตั้งค่า ${XFRM_IF} แล้ว
# iptables -A FORWARD --in-interface ${XFRM_IF} -j ยอมรับ
# iptables --table nat -A POSTROUTING --out-interface ens4 -j MASQUERADE
        ;;
    ลูกค้าดาวน์)
# iptables -D FORWARD --in-interface ${XFRM_IF} -j ยอมรับ
# iptables --table nat -D POSTROUTING --out-interface ens4 -j MASQUERADE
        ลิงก์ ip ของ ${XFRM_IF}
        ;;
เอสแซค
อฟ
chmod +x /usr/local/bin/rw-updown.sh

ดังนั้นหลังจากเชื่อมต่อไคลเอ็นต์แล้ว เราจะเห็นอินเทอร์เฟซที่สร้างขึ้น:

root@vpn-iowa:~# ip นโยบาย xfrm 
src 0.0.0.0/0 dst 172.16.20.64/26 
    กำจัดลำดับความสำคัญ 386687 
    ทำเครื่องหมาย 0x2/0xffffffff 
    tmpl src 10.128.0.14 dst 173.197.16.118
        proto esp spi 0x08547b23 reqid 2 โหมดอุโมงค์
    if_id 0x2
src 172.16.20.64/26 dst 0.0.0.0/0 
    dir fwd ลำดับความสำคัญ 386687 
    ทำเครื่องหมาย 0x2/0xffffffff 
    tmpl src 173.197.16.118 dst 10.128.0.14
        อุโมงค์โหมด proto esp reqid 2
    if_id 0x2
src 172.16.20.64/26 dst 0.0.0.0/0 
    ลำดับความสำคัญ 386687 
    ทำเครื่องหมาย 0x2/0xffffffff 
    tmpl src 173.197.16.118 dst 10.128.0.14
        อุโมงค์โหมด proto esp reqid 2
    if_id 0x2
src 0.0.0.0/0 dst 0.0.0.0/0 
    ซ็อกเก็ตลำดับความสำคัญ 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    ลำดับความสำคัญเอาท์พุต 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
    ซ็อกเก็ตลำดับความสำคัญ 0

... มากกว่า

และวิ่งอย่างมั่นคง ปิง 1.1.1.1 บนไคลเอนต์ทำให้ทราฟฟิกมาถึง RX แพ็กเก็ต 246:

root@vpn-iowa:~# ifconfig
ens4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        inet 10.128.0.14 netmask 255.255.255.255 ออกอากาศ 0.0.0.0
        inet6 fe80::4001:aff:fe80:e คำนำหน้า 64 scopeid 0x20<link>
        อีเธอร์ 42:01:0a:80:00:0e txqueuelen 1000 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 2668 ไบต์ 444824 (444.8 KB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 1907 ไบต์ 586712 (586.7 KB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

แท้จริง: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
        inet 127.0.0.1 เน็ตมาสก์ 255.0.0.0
        inet6 ::1 คำนำหน้าlen 128 scopeid 0x10<host>
        วนซ้ำ txqueuelen 1,000 (วนกลับในเครื่อง)
        แพ็คเก็ต RX 140 ไบต์ 13208 (13.2 KB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 140 ไบต์ 13208 (13.2 KB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

xfrm2: flags=193<UP,RUNNING,NOARP> mtu 1500
        inet6 fe80::85d9:2aa5:841:803f คำนำหน้า 64 scopeid 0x20<ลิงค์>
        ไม่ระบุ 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
        แพ็คเก็ต RX 246 ไบต์ 18819 (18.8 KB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 0 ไบต์ 0 (0.0 B)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

ฉันจะเป็นหนี้คุณตลอดไปถ้าคุณสามารถช่วยฉันได้ฉันอ่านแหล่งข้อมูลนับล้านแล้วและยังไม่สามารถเข้าใจสิ่งนี้ได้ ขอขอบคุณ!

cn flag
เหตุใดคุณจึงกำหนด ID อินเทอร์เฟซและเครื่องหมาย (อันหลังจริง ๆ แล้วต้องทำเครื่องหมายการรับส่งข้อมูลด้วยตนเอง) คุณอ่านหน้าบน [VPN ตามเส้นทาง](https://wiki.strongswan.org/projects/strongswan/wiki/RouteBasedVPN) บนวิกิ StrongSwan หรือไม่ และเกี่ยวกับการส่งต่อ คุณได้อ่าน [หน้าวิกินี้](https://wiki.strongswan.org/projects/strongswan/wiki/ForwardingAndSplitTunneling)หรือไม่
Jonathan S. Fisher avatar
cn flag
ก่อนอื่นขอขอบคุณที่สละเวลาตอบ :) เครื่องหมายที่เหลือจากตอนที่ฉันพยายามใช้ vti แทน xfrm ฉันสามารถลบออกได้ แต่ก็ไม่ได้สร้างความแตกต่าง ฉันอ่านทั้งสองหน้าแล้ว ฉันเปิดใช้งานการส่งต่อ IP ใน sysctl ฉันได้ลองทั้งตามเส้นทางและตามนโยบายแล้ว แต่ก็ไม่สามารถทำงานได้ ฉันต้องการ VPN ตามเส้นทางมากกว่า แต่ ณ จุดนี้ฉันต้องการ _anything_ เพื่อทำงาน
cn flag
ลบรอยได้แน่นอน คุณต้องมี NAT (ไม่จำเป็นต้องติดตั้งในสคริปต์อัปดาวน์ โดยเฉพาะอย่างยิ่งหากคุณคาดหวังหลายไคลเอ็นต์) คุณต้องมีเส้นทางไปยัง IP เสมือนของไคลเอ็นต์ผ่านอินเทอร์เฟซ XFRM (ตรวจสอบสคริปต์ตัวอย่าง VTI ในหน้าแรกที่ฉันเชื่อมโยงไว้ด้านบน คุณสามารถทำได้ในลักษณะเดียวกันสำหรับอินเทอร์เฟซ XFRM) อย่างไรก็ตาม คุณสามารถใช้อินเทอร์เฟซและเส้นทางเดียว (สำหรับเครือข่ายย่อย `172.16.20.64/26` ทั้งหมด) และกำจัดสคริปต์อัปดาวน์ (กำหนดค่า ID อินเทอร์เฟซแบบคงที่ในการกำหนดค่าแทน `%unique`)
Jonathan S. Fisher avatar
cn flag
ยอดเยี่ยมขอบคุณ

โพสต์คำตอบ

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