ฉันมีโฮสต์สองสามโฮสต์หลังเราเตอร์ NAT ที่ฉันต้องการเข้าถึงผ่าน wireguard VPN ฉันสามารถกำหนดค่าเครือข่ายส่วนตัวได้สำเร็จ แต่ก็ยังมีบางอย่างที่ทำให้ฉันงุนงง
ฉันต้องการให้เพื่อนแต่ละคน:
- เข้าถึงกัน (
172.9.9.*
) ผ่าน VPN (ผ่าน wg0
)
- เข้าถึงทุกโฮสต์อื่น ๆ นอก VPN (ผ่าน
eth0
).
นี่คือสคีมาของเครือข่ายและการกำหนดค่าปัจจุบัน:
âââââââ ââââââââââ ââ âââââââ
â S âââââ⤠อินเทอร์เน็ต âââââ⤠A â
âââââââ âââââ¬âââââ ââ âââââââ
â
â
ââââââ´ââââââ
â แนท ดีเอชซีพี â
âââ⤠เราเตอร์ ââââ
â ââââââââââââ â
â
ââââ´âââ ââââ´âââ
X â â B â
âââââââ âââââââ
ส
เป็นเซิร์ฟเวอร์ VPN และสามารถเข้าถึงได้บนอินเทอร์เน็ตผ่าน IP แบบคงที่
เอ็กซ์
เป็น "คอมพิวเตอร์เซิร์ฟเวอร์" สามารถเข้าถึงอินเทอร์เน็ตได้ แต่อยู่หลัง NAT และ IP นั้นเป็นแบบไดนามิกและไม่ทราบล่วงหน้า
ก
เป็น "ไคลเอนต์ระยะไกล" ที่ต้องการเชื่อมต่อ เอ็กซ์
;
ข
เป็น "ลูกค้าท้องถิ่น" ที่ต้องการเชื่อมต่อ เอ็กซ์
และอยู่ในเครือข่ายท้องถิ่นเดียวกัน
ฉันต้องการสิ่งนั้น ก
และ ข
สามารถเชื่อมต่อกับ เอ็กซ์
ผ่าน ส
แต่โฮสต์เหล่านี้ทั้งหมดควรใช้ VPN เฉพาะเมื่อติดต่อกันเท่านั้น ไม่ใช่เมื่อเข้าถึงอินเทอร์เน็ต
ตัวอย่างเช่น ก
สามารถ ping google.com ได้โดยตรง แต่จะ ping เอ็กซ์
ทาง ส
.
หลังจากค้นหาและอ่านเอกสารแล้ว ก็ยังไม่ชัดเจนสำหรับฉันว่าจะสามารถทำได้โดยไม่ต้องใช้ iptables
และถ้าเป็นไปได้ให้ใช้การกำหนดค่า wireguard เท่านั้น
การกำหนดค่าปัจจุบันมีดังต่อไปนี้:
## ส wg0.conf
[อินเตอร์เฟซ]
PrivateKey = S-คีย์ส่วนตัว
ที่อยู่ = 172.9.9.1/24
PostUp = iptables -A ส่งต่อ -i wg0 -j ยอมรับ; iptables -t nat -A โพสต์ -o eth0 -j MASQUERADE
PostDown = iptables -D ส่งต่อ -i wg0 -j ยอมรับ; iptables -t nat -D โพสต์ -o eth0 -j MASQUERADE
ListenPort = 51820
[เพียร์]
#ก
PublicKey = A-กุญแจสาธารณะ
IP ที่อนุญาต = 172.9.9.100/32
[เพียร์]
#บี
PublicKey = B-กุญแจสาธารณะ
IP ที่อนุญาต = 172.9.9.101/32
[เพียร์]
# X
PublicKey = X-พับลิกคีย์
IP ที่อนุญาต = 172.9.9.10/32
# wg0.conf
[อินเตอร์เฟซ]
ที่อยู่ = 172.9.9.100/24
PrivateKey = A-คีย์ส่วนตัว
DNS = 1.1.1.1
[เพียร์]
PublicKey = S-กุญแจสาธารณะ
ปลายทาง = ที่อยู่ S-ip:51820
IP ที่อนุญาต = 0.0.0.0/0, ::/0
ข
การกำหนดค่าจะคล้ายกับ ก
แต่ด้วย IP 172.9.9.101
และรหัสส่วนตัวที่แตกต่างกัน
# X wg0.conf
[อินเตอร์เฟซ]
ที่อยู่ = 172.9.9.10/24
PrivateKey = X-ส่วนตัวคีย์
DNS = 1.1.1.1
[เพียร์]
PublicKey = S-กุญแจสาธารณะ
ปลายทาง = ที่อยู่ S-ip:51820
IP ที่อนุญาต = 0.0.0.0/0, ::/0
PersistentKeepalive = 25 # เพื่อให้เข้าถึงเซิร์ฟเวอร์ได้
การกำหนดค่านี้ใช้งานได้และโฮสต์ทั้งหมดสามารถเข้าถึงได้ผ่าน VPN แต่ฉันต้องการให้ทราฟฟิกส่งตรงไปยังโฮสต์เท่านั้น 172.9.9.*
ผ่าน VPN นี้ การรับส่งข้อมูลอื่นๆ จะถูกกำหนดเส้นทางโดยเกตเวย์เริ่มต้น
สิ่งที่ทำให้ฉันงงก็คือ ถ้าฉันเปลี่ยนการกำหนดค่าของ ก
ดังนั้น
IP ที่อนุญาต = 172.9.9.0/24
แล้วสำหรับ ก
แพ็คเกจถูกกำหนดเส้นทางตามที่ตั้งใจไว้ (เช่น ฉันทำได้ ขด ifconfig.me
และได้รับ ก
's public IP) แต่ถ้าทำแบบเดียวกันบน เอ็กซ์
มันจะใช้งานไม่ได้และแพ็คเกจจะไม่ทำงาน 172.9.9.0/24
จะไม่สามารถจัดส่งได้
แก้ไข #1
ลืมพูดถึงว่าฉันจะชอบถ้าเมื่อเชื่อมต่อกับ เอ็กซ์
,ลูกค้าท้องถิ่นเช่น ข
จะไม่ส่งแพ็คเกจนอกเครือข่ายท้องถิ่น ดังนั้น B -> เราเตอร์ -> X
และไม่ B -> เราเตอร์ -> S -> เราเตอร์ -> X
.