ข้อจำกัดความรับผิดชอบ: โพสต์ใหม่จาก stackoverflow: https://stackoverflow.com/questions/67917278/site2site-wireguard-with-docker-routing-problems
ฉันกำลังพยายามมีคอนเทนเนอร์สองคอนเทนเนอร์ ทำงานบน RPI สองรายการ ทำหน้าที่เป็น VPN แบบไซต์ต่อไซต์ระหว่างเครือข่ายที่ 1 และเครือข่ายที่ 2
ด้วยการตั้งค่าด้านล่าง ฉันสามารถ ping ได้ จากภายในคอนเทนเนอร์ เครือข่ายซึ่งกันและกัน:
- จาก docker container 1 ฉันสามารถ ping ที่อยู่ 192.168.1.1
- จาก docker container 2 ฉันสามารถ ping ที่อยู่ 192.168.10.1
แต่ถ้าฉันพยายาม ping 192.168.1.1 จากโฮสต์ System1 (192.168.10.100) ฉันมีข้อผิดพลาด (ดูภาพด้านล่างเพื่อให้เห็นภาพสิ่งที่ฉันพยายามทำ)
ฉันเข้าใจว่าฉันต้องเพิ่มเส้นทางแบบคงที่บนโฮสต์ system1 (192.168.10.100) เพื่อกำหนดเส้นทางการรับส่งข้อมูลสำหรับ 192.168.1.0/24 ผ่านคอนเทนเนอร์ wireguard (172.17.0.5) ดังนั้นฉันจึงเรียกใช้:
เส้นทาง $i p เพิ่ม 192.168.1.0/24 ผ่าน 172.17.0.5
เส้นทาง $ ip
ค่าเริ่มต้นผ่าน 192.168.10.1 dev eth0 proto dhcp src 192.168.10.100 เมตริก 100
172.17.0.0/16 dev docker0 proto kernel ขอบเขตลิงค์ src 172.17.0.1
172.18.0.0/16 dev br-e19a4f1b7646 โปรโตเคอร์เนลขอบเขตลิงก์ src 172.18.0.1 ลิงก์ดาวน์
172.19.0.0/16 dev br-19684dacea29 โปรโตเคอร์เนลขอบเขตลิงก์ src 172.19.0.1
172.20.0.0/16 dev br-446863cf7cef โปรโตเคอร์เนลขอบเขตลิงก์ src 172.20.0.1
172.21.0.0/16 dev br-6800ed9b4dd6 ขอบเขตเคอร์เนลโปรโต ลิงก์ src 172.21.0.1 ลิงก์ดาวน์
172.22.0.0/16 dev br-8f8f439a7a28 ขอบเขตเคอร์เนลโปรโต ลิงก์ src 172.22.0.1 ลิงก์ดาวน์
192.168.1.0/24 ผ่าน 172.17.0.5 dev docker0
192.168.10.0/24 dev eth0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.10.100
192.168.10.1 dev eth0 proto dhcp ขอบเขตลิงก์ src 192.168.10.100 เมตริก 100
แต่การ ping ไปที่ 192.168.1.1 ยังคงล้มเหลว
ด้วยการรัน tcpdump บนคอนเทนเนอร์ 2 ฉันเห็นว่ามีบางแพ็กเก็ตถึงคอนเทนเนอร์จริง ๆ :
root@936de7c0d7eb:/# tcpdump -n -i ใด ๆ
tcpdump: เอาต์พุต verbose ถูกระงับ ใช้ -v หรือ -vv สำหรับการถอดรหัสโปรโตคอลแบบเต็ม
ฟัง LINUX_SLL ประเภทลิงก์ใด ๆ (Linux สุกแล้ว) ขนาดการจับภาพ 262144 ไบต์
10:11:19.885845 IP [publicIPsystem1].56200 > 172.17.0.6.56100: UDP ความยาว 128
10:11:30.440764 IP 172.17.0.6.56100 > [publicIPsystem1].56200: UDP ความยาว 32
10:11:35.480625 ARP, Request who-has 172.17.0.1 บอก 172.17.0.6 ความยาว 28
10:11:35.480755 ARP, ตอบกลับ 172.17.0.1 is-at 02:42:24:e5:ac:38, ยาว 28
ดังนั้นฉันเดาว่ามันไม่ใช่ปัญหาการกำหนดเส้นทางในระบบ 1
ใครช่วยบอกฉันทีว่าจะวินิจฉัยสิ่งนี้ต่อไปได้อย่างไร
แก้ไข 1:
ฉันได้ทำการทดสอบต่อไปนี้แล้ว:
- รัน 'tcpdump -ni any' บนคอนเทนเนอร์ 2
- ส่ง ping จากระบบ 1 (จากระบบโฮสต์) 'ping -c 1 192.168.1.1 .
บนคอนเทนเนอร์ 2 tcpdump บันทึกต่อไปนี้:
tcpdump: เอาต์พุต verbose ถูกระงับ ใช้ -v หรือ -vv สำหรับการถอดรหัสโปรโตคอลแบบเต็ม
ฟัง LINUX_SLL ประเภทลิงก์ใด ๆ (Linux สุกแล้ว) ขนาดการจับภาพ 262144 ไบต์
15:04:47.495066 IP [publicIPsystem1].56200 > 172.17.0.3.56100: UDP ความยาว 128
15:04:58.120761 IP 172.17.0.3.56100 > [publicIPsystem1].56200: UDP ความยาว 32
- ส่ง ping จากคอนเทนเนอร์ (ภายในคอนเทนเนอร์) ' ping -c 1 192.168.1.1 .
บนคอนเทนเนอร์ 2 tcpdump บันทึกต่อไปนี้:
# tcpdump -ni ใด ๆ
tcpdump: เอาต์พุต verbose ถูกระงับ ใช้ -v หรือ -vv สำหรับการถอดรหัสโปรโตคอลแบบเต็ม
ฟัง LINUX_SLL ประเภทลิงก์ใด ๆ (Linux สุกแล้ว) ขนาดการจับภาพ 262144 ไบต์
15:05:48.120717 IP [publicIPsystem1].56200 > 172.17.0.3.56100: UDP ความยาว 128
15:05:48.120871 IP 10.13.18.2 > 192.168.1.1: คำขอเสียงสะท้อน ICMP, id 747, seq 1, ความยาว 64
15:05:48.120963 IP 172.17.0.3 > 192.168.1.1: คำขอเสียงสะท้อน ICMP, id 747, seq 1, ความยาว 64
15:05:48.121955 IP 192.168.1.1 > 172.17.0.3: ICMP echo reply, id 747, seq 1, length 64
15:05:48.122054 IP 192.168.1.1 > 10.13.18.2: ICMP echo reply, id 747, seq 1, length 64
15:05:48.122246 IP 172.17.0.3.56100 > [publicIPsystem1].56200: UDP ความยาว 128
15:05:53.160617 ARP, Request who-has 172.17.0.1 บอก 172.17.0.3 ยาว 28
15:05:53.160636 ARP, Request who-has 172.17.0.3 บอก 172.17.0.1 ความยาว 28
15:05:53.160745 ARP ตอบกลับ 172.17.0.3 is-at 02:42:ac:11:00:03, ความยาว 28
15:05:53.160738 ARP, ตอบกลับ 172.17.0.1 is-at 02:42:24:e5:ac:38, ยาว 28
15:05:58.672032 IP [publicIPsystem1].56200 > 172.17.0.3.56100: UDP ความยาว 32
ดังนั้นดูเหมือนว่าแพ็กเก็ตจะได้รับการปฏิบัติที่แตกต่างจากคอนเทนเนอร์ 2 ขึ้นอยู่กับบางสิ่งที่ฉันขาดหายไป .. อาจเป็นปัญหาของ iptables?
|
ไซต์ 1 |
ไซต์ 2 |
เครือข่าย 1 ช่วง IP |
192.168.10.0/24 |
192.168.1.0/24 |
ที่อยู่ระบบโฮสต์ |
192.168.10.100 |
192.168.1.100 |
ช่วงสะพานนักเทียบท่า 0 |
172.17.0.0/16 |
172.17.0.0/16 |
ที่อยู่คอนเทนเนอร์ |
172.17.0.5 |
172.17.0.6 |
ระบบ 1 - wg0.conf
[อินเตอร์เฟซ]
ที่อยู่ = 10.13.18.2
คีย์ส่วนตัว = *คีย์ส่วนตัว*
ListenPort = 56200
PostUp = iptables -A FORWARD -i %i -j ยอมรับ; iptables -A ไปข้างหน้า -o %i -j ยอมรับ; iptables -t nat -A โพสต์ -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ยอมรับ; iptables -D ส่งต่อ -o %i -j ยอมรับ; iptables -t nat -D โพสต์ -o eth0 -j MASQUERADE
[เพียร์]
PublicKey = *พับลิกคีย์*
ปลายทาง = *system2address*:56100
AllowedIPs = 10.13.18.1/32 , 192.168.1.0/24
ระบบ 2 - wg0.conf
[อินเตอร์เฟซ]
ที่อยู่ = 10.13.18.1
ListenPort = 56100
คีย์ส่วนตัว = *คีย์ส่วนตัว*
PostUp = iptables -A FORWARD -i %i -j ยอมรับ; iptables -A ไปข้างหน้า -o %i -j ยอมรับ; iptables -t nat -A โพสต์ -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ยอมรับ; iptables -D ส่งต่อ -o %i -j ยอมรับ; iptables -t nat -D โพสต์ -o eth0 -j MASQUERADE
[เพียร์]
#peer_casaleuven
PublicKey = *พับลิกคีย์*
AllowedIPs = 10.13.18.2/32 , 192.168.10.0/24
ปลายทาง = *system1address*:56200