ฉันมีเซิร์ฟเวอร์การเข้าถึงระยะไกล StrongSwan IPSec ที่ทำงานบน RHEL และไคลเอนต์ทั้งหมดบนเครือข่ายท้องถิ่นเดียวกัน ฉันมีเซิร์ฟเวอร์ Samba ที่ทำงานบนโฮสต์ RHEL เดียวกันกับที่ฉันต้องการให้ใช้งานได้ผ่าน VPN แต่ไม่ให้อยู่นอกอุโมงค์ ฉันสามารถรับอุโมงค์ IPSec ได้สำเร็จ (ต้องสร้างโปรไฟล์ MacOS ด้วย Apple Configurator2 ที่เปิดใช้งาน Perfect Forward Security เพื่อให้มีการจับคู่การเข้ารหัส) แต่ฉันไม่สามารถรับปริมาณข้อมูลไปยังเส้นทางภายในเซิร์ฟเวอร์ได้อย่างถูกต้องฉันได้ทำการจับแพ็กเก็ตและเห็น ESP ขาเข้าและแพ็กเก็ต ICMP ที่ถอดรหัสจากการ ping จากไคลเอนต์ แต่เซิร์ฟเวอร์ไม่สามารถตอบกลับได้ ฉันใช้เวลาหลายสัปดาห์เพื่อค้นหาว่ากฎ iptables ใดที่ฉันต้องใช้ในการเชื่อมต่อ แต่ฉันคิดว่าฉันขาดความเข้าใจบางอย่าง ฉันสามารถตั้งค่า OpenVPN และ WireGuard VPN ได้โดยไม่มีปัญหากับอินเทอร์เฟซ tun แต่ IPSec ตามความเข้าใจของฉันถูกถอดรหัสโดยนโยบายในเคอร์เนล ดังนั้นฉันจึงไม่ทราบว่าจะส่งผลต่อการกำหนดเส้นทางอย่างไร
ฉันใช้การตั้งค่าของฉันจากเอกสารตัวอย่าง StrongSwan อย่างเป็นทางการสำหรับ การเข้าถึงระยะไกลใช้สิ่งนี้ เอกสารการกำหนดค่า swanctlอ่านโพสต์ในฟอรัมและแปลรูปแบบเก่าเป็นรูปแบบใหม่ด้วย นี้ - เช่นเดียวกับการอ่านเกี่ยวกับ การส่งต่อ และ VPN ตามเส้นทาง - แต่ฉันคิดว่าฉันขาดความเข้าใจระดับสูงเกี่ยวกับเส้นทางการรับส่งข้อมูลภายในเซิร์ฟเวอร์ VPN
ไดอะแกรมเครือข่ายเชิงตรรกะ
ไดอะแกรมเครือข่ายเชิงตรรกะ
swanctl.conf (พร้อมแสดงความคิดเห็นในสิ่งอื่นที่ฉันได้ลอง)
การเชื่อมต่อ {
ikev2-vpn {
การกระจายตัว = ใช่
rekey_time=0 วินาที
#โมไบค์ = ไม่
รุ่น=2
ข้อเสนอ = aes256gcm16-prfsha384-ecp384
remote_addrs=%ใดๆ
local_addrs=192.168.1.15
#vips=10.0.3.1
#remote_addrs=192.168.1.23
#pools=10.0.3.0/24
#encap=ใช่
#dpd_delay=300 วินาที
พูล=พูล1,พูล2
#if_id_in=6
#if_id_out=6
เด็ก {
ikev2-vpn {
#start_action=ไม่มี
esp_proposals=aes256gcm16-prfsha384-ecp384
#local_ts=10.0.3.1/32
local_ts=10.0.1.0/24
remote_ts=10.0.2.0/24
#remote_ts=10.0.3.10-10.0.3.200
#dpd_action=ชัดเจน
updown=/usr/libexec/strongswan/_updown iptables
}
}
ท้องถิ่น {
รับรองความถูกต้อง=ecdsa-384-sha384
certs = /etc/strongswan/ipsec.d/certs/server.crt
id = 192.168.1.15
}
ระยะไกล {
รับรองความถูกต้อง=ecdsa-384-sha384
id = % ใดๆ
}
}
}
สระว่ายน้ำ {
พูล1 {
#addrs=10.0.3.0/24
แอดเดรส=10.0.1.0/24
}
พูล 2 {
#addrs=10.0.3.10-10.0.3.200
แอดเดรส=10.0.2.0/24
}
}
ความลับ {
เซิร์ฟเวอร์ ecdsa {
file=/etc/strongswan/ipsec.d/private/server.key
}
ลูกค้า ecdsa {
file=/etc/strongswan/ipsec.d/private/client.key
}
}
เจ้าหน้าที่ {
การรับรอง {
cacert = /etc/strongswan/ipsec.d/cacerts/ca.crt
}
}
swanctl --รายการ-sas
ikev2-vpn: #2 ตั้งค่าแล้ว IKEv2 c98d6dc49ca0acd4_i 85342c9a0809e294_r*
ท้องถิ่น '192.168.1.15' @ 192.168.1.15[4500]
ระยะไกล 'client2.vpn' @ 192.168.1.23[4500] [10.0.1.1]
AES_GCM_16-256/PRF_HMAC_SHA2_384/ECP_384
ก่อตั้งขึ้นเมื่อปี 53 ที่ผ่านมา
ikev2-vpn: #4, reqid 1, ติดตั้ง, อุโมงค์, ESP:AES_GCM_16-256
ติดตั้งเมื่อ 53 วินาทีที่แล้ว คีย์ใหม่ในปี 3247 หมดอายุในปี 3907
ใน c334ea0b, 0 ไบต์, 0 แพ็กเก็ต
ออก 021348d4, 0 ไบต์, 0 แพ็คเก็ต
ท้องถิ่น 10.0.1.0/24
ระยะไกล 10.0.2.0/24
swanctl --list-conns
ikev2-vpn: IKEv2 ไม่มีการตรวจสอบสิทธิ์ซ้ำ ไม่มีการคีย์ซ้ำ
ท้องถิ่น: 192.168.1.15
ระยะไกล: % ใด ๆ
การรับรองความถูกต้องของรหัสสาธารณะในเครื่อง:
รหัส: 192.168.1.15
ใบรับรอง: [CERT_DN]
การตรวจสอบคีย์สาธารณะระยะไกล:
รหัส: %ใด ๆ
ikev2-vpn: TUNNEL ทำการรีคีย์ทุกๆ 3600 วินาที
ท้องถิ่น: 10.0.1.0/24
ระยะไกล: 10.0.2.0/24
สถานะ ip -s xfrm
src 192.168.1.15 dst 192.168.1.23
proto esp spi 0x021348d4(34818260) reqid 1(0x00000001) โหมดอุโมงค์
หน้าต่างเล่นซ้ำ 0 วินาที 0x00000000 ตั้งค่าสถานะ af-unspec (0x00100000)
aead rfc4106(gcm(aes)) [คีย์] (288 บิต) 128
บริบทต่อต้านการเล่นซ้ำ: seq 0x0, oseq 0x0, บิตแมป 0x00000000
การกำหนดค่าตลอดอายุการใช้งาน:
ขีดจำกัด: ซอฟต์ (INF)(ไบต์), ฮาร์ด (INF)(ไบต์)
ขีด จำกัด : อ่อน (INF) (แพ็คเก็ต), ฮาร์ด (INF) (แพ็คเก็ต)
หมดอายุเพิ่ม: soft 3418(วินาที), hard 3960(sec)
หมดอายุการใช้งาน: นุ่มนวล 0(วินาที), แข็ง 0(วินาที)
อายุการใช้งานปัจจุบัน:
0 (ไบต์), 0 (แพ็คเก็ต)
เพิ่ม [เวลา] ใช้ -
สถิติ:
หน้าต่างเล่นซ้ำ 0 เล่นซ้ำ 0 ล้มเหลว 0
src 192.168.1.23 dst 192.168.1.15
proto esp spi 0xc334ea0b(3275024907) reqid 1(0x00000001) อุโมงค์โหมด
หน้าต่างเล่นซ้ำ 32 วินาที 0x00000000 ตั้งค่าสถานะ af-unspec (0x00100000)
aead rfc4106(gcm(aes)) [คีย์] (288 บิต) 128
บริบทป้องกันการเล่นซ้ำ: seq 0xc, oseq 0x0, bitmap 0x00000fff
การกำหนดค่าตลอดอายุการใช้งาน:
ขีดจำกัด: ซอฟต์ (INF)(ไบต์), ฮาร์ด (INF)(ไบต์)
ขีด จำกัด : อ่อน (INF) (แพ็คเก็ต), ฮาร์ด (INF) (แพ็คเก็ต)
หมดอายุเพิ่ม: soft 3300(sec), hard 3960(sec)
หมดอายุการใช้งาน: นุ่มนวล 0(วินาที), แข็ง 0(วินาที)
อายุการใช้งานปัจจุบัน:
1,008 (ไบต์), 12 (แพ็กเก็ต)
เพิ่ม [เวลา] ใช้ [เวลา]
สถิติ:
หน้าต่างเล่นซ้ำ 0 เล่นซ้ำ 0 ล้มเหลว 0
แสดงนโยบาย ip xfrm
src 10.0.1.0/24 dst 10.0.2.0/24
ลำดับความสำคัญ 375423 ptype main
tmpl src 192.168.1.15 dst 192.168.1.23
proto esp spi 0x021348d4 reqid 1 โหมดอุโมงค์
src 10.0.2.0/24 dst 10.0.1.0/24
dir fwd ลำดับความสำคัญ 375423 ptype หลัก
tmpl src 192.168.1.23 dst 192.168.1.15
อุโมงค์โหมด proto esp reqid 1
src 10.0.2.0/24 dst 10.0.1.0/24
ลำดับความสำคัญ 375423 ptype main
tmpl src 192.168.1.23 dst 192.168.1.15
อุโมงค์โหมด proto esp reqid 1
src 0.0.0.0/0 dst 0.0.0.0/0
ซ็อกเก็ตที่มีลำดับความสำคัญ 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
ลำดับความสำคัญของซ็อกเก็ตเอาท์พุต 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
ซ็อกเก็ตที่มีลำดับความสำคัญ 0 ptype main
src 0.0.0.0/0 dst 0.0.0.0/0
ลำดับความสำคัญของซ็อกเก็ตเอาท์พุต 0 ptype main
src ::/0 dst ::/0
ซ็อกเก็ตที่มีลำดับความสำคัญ 0 ptype main
src ::/0 dst ::/0
ลำดับความสำคัญของซ็อกเก็ตเอาท์พุต 0 ptype main
src ::/0 dst ::/0
ซ็อกเก็ตที่มีลำดับความสำคัญ 0 ptype main
src ::/0 dst ::/0
ลำดับความสำคัญของซ็อกเก็ตเอาท์พุต 0 ptype main
iptables-บันทึก
# สร้างโดย iptables-save v1.8.4
*ความปลอดภัย
: ยอมรับอินพุต [22858074:106762962340]
:ส่งต่อ ยอมรับ [7:588]
: ยอมรับเอาต์พุต [13832427:3964756363]
ให้สัญญา
# สร้างโดย iptables-save v1.8.4
*ดิบ
: ยอมรับ [22858911:106763119967]
: ยอมรับเอาต์พุต [13832428:3964756655]
ให้สัญญา
# สร้างโดย iptables-save v1.8.4
* แหลกเหลว
: ยอมรับ [22858911:106763119967]
: ยอมรับอินพุต [22858308:106763007491]
:ส่งต่อ ยอมรับ [7:588]
: ยอมรับเอาต์พุต [13832428:3964756655]
: ยอมรับภายหลัง [13833383:3964877586]
:LIBVIRT_PRT - [0:0]
-A โพสต์ -j LIBVIRT_PRT
-A LIBVIRT_PRT -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-เติม
ให้สัญญา
# สร้างโดย iptables-save v1.8.4
*แนท
: ยอมรับ [186346:34394324]
: ยอมรับอินพุต [185651:34259782]
: ยอมรับภายหลัง [16086:1727773]
: ยอมรับเอาต์พุต [16085:1727689]
:LIBVIRT_PRT - [0:0]
-A โพสต์ -j LIBVIRT_PRT
-A โพสต์ -s 172.16.0.0/24 -o enp0s31f6 -j MASQUERADE
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 224.0.0.0/24 -j กลับ
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 255.255.255.255/32 -j กลับ
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-พอร์ต 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j สวมหน้ากาก
ให้สัญญา
# สร้างโดย iptables-save
*กรอง
: ยอมรับอินพุต [22831621:106727043679]
:ส่งต่อ ยอมรับ [0:0]
: ยอมรับเอาต์พุต [13832420:3964757167]
:LIBVIRT_INP - [0:0]
:LIBVIRT_OUT - [0:0]
:LIBVIRT_FWO - [0:0]
:LIBVIRT_FWI - [0:0]
:LIBVIRT_FWX - [0:0]
-A FORWARD -s 10.0.2.0/24 -d 10.0.1.0/24 -i enp0s31f6 -m นโยบาย --dir ใน --pol ipsec --reqid 1 --proto esp -j ยอมรับ
-A FORWARD -s 10.0.1.0/24 -d 10.0.2.0/24 -o enp0s31f6 -m นโยบาย --dir ออก --pol ipsec --reqid 1 --proto esp -j ยอมรับ
-A LIBVIRT_INP -i virbr0 -p udp -m udp --dport 53 -j ยอมรับ
-A LIBVIRT_INP -i virbr0 -p tcp -m tcp --dport 53 -j ยอมรับ
-A LIBVIRT_INP -i virbr0 -p udp -m udp --dport 67 -j ยอมรับ
-A LIBVIRT_INP -i virbr0 -p tcp -m tcp --dport 67 -j ยอมรับ
-A LIBVIRT_OUT -o virbr0 -p udp -m udp --dport 53 -j ยอมรับ
-A LIBVIRT_OUT -o virbr0 -p tcp -m tcp --dport 53 -j ยอมรับ
-A LIBVIRT_OUT -o virbr0 -p udp -m udp --dport 68 -j ยอมรับ
-A LIBVIRT_OUT -o virbr0 -p tcp -m tcp --dport 68 -j ยอมรับ
-A LIBVIRT_FWO -s 192.168.122.0/24 -i virbr0 -j ยอมรับ
-A LIBVIRT_FWO -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A LIBVIRT_FWI -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้ง -j ยอมรับ
-A LIBVIRT_FWI -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A LIBVIRT_FWX -i virbr0 -o virbr0 -j ยอมรับ
ให้สัญญา