Score:1

กำหนดเส้นทางเฉพาะเครือข่ายส่วนตัวใน wireguard VPN

ธง in

ฉันมีโฮสต์สองสามโฮสต์หลังเราเตอร์ 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.

mx flag
`AllowedIPs` คือหนทางที่จะไป ดังที่ Justin อธิบายอย่างชัดเจนในคำตอบของพวกเขา เป็นไปได้ว่าคุณไม่สามารถ `curl ifconfig.me` เมื่อใช้ `AllowedIPs = 172.9.9.0/24` เนื่องจากปัญหา DNS ตรวจสอบว่าคุณสามารถ `ping 8.8.8.8`: หากทำได้ ให้แก้ไขการแก้ไข DNS ของคุณ
Score:2
ธง cn

ชุด IP ที่อนุญาต ไปยังที่อยู่ IP ที่คุณต้องการ เส้นทางไป/ผ่านเพียร์.

ในการกำหนดค่าฮับและซี่ล้อปกติ บนฮับ (S) คุณจะต้องกำหนดค่า IP ที่อนุญาต สำหรับแต่ละเพียร์เช่นเดียวกับที่คุณมี กำหนดเส้นทางแพ็กเก็ตไปยังแต่ละเพียร์เฉพาะในกรณีที่พวกเขาใช้ที่อยู่ IP WireGuard ของเพียร์เป็นที่อยู่ปลายทาง และบนซี่ของคุณ (A, B และ X) คุณต้องกำหนดค่า IP ที่อนุญาต ไปยัง CIDR ของเครือข่าย WireGuard ของคุณ (172.9.9.0/24) กำหนดเส้นทางแพ็กเก็ตไปยังฮับเฉพาะในกรณีที่ใช้ที่อยู่ IP WireGuard ของเพียร์อื่นเป็นที่อยู่ปลายทาง

ด้วยการกำหนดค่าปกติ คุณจะเข้าถึง A จาก B หรือ X ด้วยที่อยู่ IP WireGuard ของ A 172.9.9.100, B จาก A หรือ X กับ 172.9.9.101, และ X จาก A หรือ B ด้วย 172.9.9.10.

แต่ถ้าคุณต้องการเข้าถึงแต่ละซี่ด้วยที่อยู่ IP ที่เชื่อมโยงกับ NIC จริงของซี่ (เช่น eth0) คุณจะต้องปรับ IP ที่อนุญาต ทั้งบนฮับและซี่ล้อเพื่อรวมที่อยู่ IP เหล่านั้น

ตัวอย่างเช่น ถ้า A's eth0 ที่อยู่ 198.51.100.65, B's คือ 192.168.0.66, และ X คือ 192.168.0.88คุณต้องปรับเพียร์ในการกำหนดค่า WireGuard ของฮับเป็น:

## ส wg0.conf
...

[เพียร์]
#ก
PublicKey = A-กุญแจสาธารณะ
IP ที่อนุญาต = 172.9.9.100/32
IP ที่อนุญาต = 198.51.100.65/32

[เพียร์]
#บี
PublicKey = B-กุญแจสาธารณะ
IP ที่อนุญาต = 172.9.9.101/32
IP ที่อนุญาต = 192.168.0.66/32

[เพียร์]
# X
PublicKey = X-พับลิกคีย์
IP ที่อนุญาต = 172.9.9.10/32
IP ที่อนุญาต = 192.168.0.88/32

และตั้งค่า IP ที่อนุญาต ในแต่ละการกำหนดค่าของซี่ล้อเป็น:

IP ที่อนุญาต = 172.9.9.0/24
IP ที่อนุญาต = 198.51.100.65/32
IP ที่อนุญาต = 192.168.0.66/32
IP ที่อนุญาต = 192.168.0.88/32

(โปรดทราบว่าคุณสามารถระบุบล็อกทั้งหมดในบรรทัดเดียวได้ เช่น AllowedIPs = 172.9.9.0/24, 198.51.100.65/32, 192.168.0.66/32, 192.168.0.88/32 หากคุณต้องการ)


ด้วยการกำหนดค่าปัจจุบันที่คุณมี IP ที่อนุญาต = 0.0.0.0/0 บน X เมื่อคุณเรียกใช้ ขด 198.51.100.65 จาก X สิ่งที่เกิดขึ้นคือ X กำลังกำหนดเส้นทางแพ็กเก็ตที่กำหนดไว้สำหรับ A (และอย่างอื่นทั้งหมด) ผ่านอุโมงค์ WireGuard ไปยัง S จากนั้น S ก็กำหนดเส้นทางแพ็กเก็ตเหล่านั้นที่ไม่ได้เข้ารหัสทางอินเทอร์เน็ตไปยัง A (ปลอมแปลงด้วยที่อยู่ IP สาธารณะของ S เอง); ในการตอบสนอง A จะส่งแพ็กเก็ตที่ไม่ได้เข้ารหัสทางอินเทอร์เน็ตไปยัง S ซึ่ง S จะกำหนดเส้นทางผ่านอุโมงค์ WireGuard ไปยัง X

หากคุณต้องการแน่ใจว่า S ไม่เคย เส้นทางแพ็กเก็ตที่อุโมงค์ผ่านเครือข่าย WireGuard ออกไปยังอินเทอร์เน็ต คุณสามารถปรับกฎ iptables เพื่อป้องกันสิ่งนี้ได้ สิ่งต่อไปนี้อาจจะทำเคล็ดลับ:

PostUp = iptables -A ไปข้างหน้า -i wg0 -o wg0 -j ยอมรับ; iptables -A ไปข้างหน้า -i wg0 -o eth0 -j DROP; iptables -A ไปข้างหน้า -i eth0 -o wg0 -j DROP
ARDVL avatar
in flag
ขอบคุณสำหรับคำอธิบายโดยละเอียด! ชัดเจนมาก แม้ว่าเกี่ยวกับการเข้าถึงโดยใช้ที่อยู่ IP ของ 'NIC' ก็ยังไม่ชัดเจนสำหรับฉัน เนื่องจาก `X` และ `B` อยู่หลัง DHCP และ IP ของพวกเขาอาจเปลี่ยนแปลง (โดยเฉพาะสำหรับ `B`) ฉันจึงไม่ทราบ ล่วงหน้าและตั้งค่า IP ที่อนุญาตที่เหมาะสม
ARDVL avatar
in flag
นอกจากนี้ ฉันได้พยายามตั้งค่า `AllowedIPs` เป็น `172.9.9.0/24` แล้ว แต่ไม่ได้ผล ตามที่กล่าวไว้ในความคิดเห็น มันเป็นปัญหา DNS
cn flag
หากต้องการใช้ที่อยู่ NIC ที่กำหนดโดย DHCP คุณจะต้องกำหนดค่าเซิร์ฟเวอร์ DHCP ของคุณเพื่อกำหนดที่อยู่ IP คงที่ X และ B หรืออัปเดตการตั้งค่า `AllowedIPs` ของเพียร์อื่นทุกครั้งที่กำหนดที่อยู่อื่นให้กับ X หรือ B ( แต่โปรดทราบว่าคุณทำสิ่งนี้แบบผสมผสานได้ โดยที่คุณเข้าถึง A ผ่านที่อยู่ NIC แต่ X และ B ผ่านที่อยู่ WireGuard ในกรณีนี้ คุณสามารถละเว้นที่อยู่ NIC ของ X และ B จากการตั้งค่า "AllowedIPs" ของคุณ .)
Score:0
ธง in

ฉันมีปัญหากับ DNS: using IP ที่อนุญาต = 172.9.9.0/24 อนุญาตให้ฉัน ping 8.8.8.8, แต่ไม่ กูเกิล.คอม.

ฉันแก้ไขรวมถึงอินเทอร์เฟซ DNS ใน IP ที่อนุญาต ดังนั้นฉันจึงได้รับการแก้ไข DNS ผ่าน VPN แต่ทราฟฟิกไม่ได้อยู่ใน VPN:

[อินเตอร์เฟซ]
...
DNS = 1.1.1.1

[เพียร์]
...
AllowedIPs = 172.9.9.0/24, 1.1.1.1/32

นี่ไม่ได้ตอบคำถามที่สองที่ฉันมี: ถ้าเป็นไปได้ เอ็กซ์ และ สื่อสารโดยตรงโดยไม่ต้องผ่าน . คำตอบอื่น ๆ ช่วยในการทำความเข้าใจว่า

แก้ไข

ดูเหมือนว่ามันจะใช้งานได้เช่นกันโดยการวาง DNS ดังนั้นจึงควรใช้เซิร์ฟเวอร์ DNS เดียวกันสำหรับทั้งสองอินเทอร์เฟซ

โพสต์คำตอบ

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