Điểm:2

bảo vệ dây site2site với docker: sự cố định tuyến

lá cờ fr

Tuyên bố miễn trừ trách nhiệm: đăng lại từ stackoverflow: https://stackoverflow.com/questions/67917278/site2site-wireguard-with-docker-routing-problems

Tôi đang cố gắng có hai vùng chứa, chạy trên hai RPI, hoạt động như một VPN site-to-site giữa Mạng 1 và Mạng 2.

Với thiết lập bên dưới, tôi có thể ping từ bên trong container mạng khác:

  • từ docker container 1 Tôi có thể ping địa chỉ 192.168.1.1
  • từ docker container 2 tôi có thể ping địa chỉ 192.168.10.1

Nhưng nếu tôi thử ping 192.168.1.1 từ máy chủ System1 (192.168.10.100) thì tôi gặp lỗi (xem hình ảnh bên dưới để hình dung những gì tôi đang cố gắng thực hiện).

Tôi hiểu rằng tôi phải thêm một tuyến tĩnh trên máy chủ system1 (192.168.10.100) để điều hướng lưu lượng truy cập cho 192.168.1.0/24 thông qua bộ chứa bảo vệ dây (172.17.0.5), do đó tôi chạy:

$i p route thêm 192.168.1.0/24 qua 172.17.0.5
tuyến đường $ ip
mặc định qua 192.168.10.1 dev eth0 proto dhcp src 192.168.10.100 số liệu 100 
172.17.0.0/16 liên kết phạm vi dev docker0 proto kernel src 172.17.0.1 
172.18.0.0/16 dev br-e19a4f1b7646 liên kết phạm vi hạt nhân proto liên kết src 172.18.0.1 
172.19.0.0/16 dev br-19684dacea29 liên kết phạm vi hạt nhân proto src 172.19.0.1 
172.20.0.0/16 dev br-446863cf7cef liên kết phạm vi hạt nhân proto src 172.20.0.1 
172.21.0.0/16 dev br-6800ed9b4dd6 liên kết phạm vi hạt nhân proto liên kết src 172.21.0.1 
172.22.0.0/16 dev br-8f8f439a7a28 liên kết phạm vi hạt nhân proto liên kết src 172.22.0.1 
192.168.1.0/24 qua 172.17.0.5 dev docker0 
192.168.10.0/24 dev eth0 liên kết phạm vi kernel proto src 192.168.10.100 
192.168.10.1 dev eth0 proto liên kết phạm vi dhcp src 192.168.10.100 số liệu 100 

nhưng ping tới 192.168.1.1 vẫn bị lỗi.

bằng cách chạy tcpdump trên vùng chứa 2, tôi thấy rằng một số gói thực sự đang đến vùng chứa:

root@936de7c0d7eb:/# tcpdump -n -i bất kỳ
tcpdump: đầu ra dài dòng bị chặn, sử dụng -v hoặc -vv để giải mã giao thức đầy đủ
nghe trên bất kỳ loại liên kết nào LINUX_SLL (Linux cook), chụp kích thước 262144 byte
10:11:19.885845 IP [publicIPsystem1].56200 > 172.17.0.6.56100: UDP, độ dài 128
10:11:30.440764 IP 172.17.0.6.56100 > [publicIPsystem1].56200: UDP, độ dài 32
10:11:35.480625 ARP, Yêu cầu ai có 172.17.0.1 cho biết 172.17.0.6, độ dài 28
10:11:35.480755 ARP, Trả lời 172.17.0.1 is-at 02:42:24:e5:ac:38, độ dài 28

vì vậy tôi đoán đó không phải là sự cố định tuyến trên hệ thống 1.

Bất cứ ai có thể cho tôi biết làm thế nào để chẩn đoán điều này hơn nữa?


CHỈNH SỬA 1:
Tôi đã làm bài kiểm tra sau:

  1. chạy 'tcpdump -ni any' trên vùng chứa 2
  2. đã gửi một lệnh ping từ Hệ thống 1 (từ hệ thống máy chủ) 'ping -c 1 192.168.1.1 .
    Trên container 2 tcpdump ghi như sau:
    tcpdump: đầu ra dài dòng bị chặn, sử dụng -v hoặc -vv để giải mã giao thức đầy đủ
    nghe trên bất kỳ loại liên kết nào LINUX_SLL (Linux cook), chụp kích thước 262144 byte
    15:04:47.495066 IP [publicIPsystem1].56200 > 172.17.0.3.56100: UDP, chiều dài 128
    15:04:58.120761 IP 172.17.0.3.56100 > [publicIPsystem1].56200: UDP, chiều dài 32
  1. đã gửi ping từ vùng chứa (trong vùng chứa) 'ping -c 1 192.168.1.1 .
    Trên container 2 tcpdump ghi như sau:
# tcpdump -ni bất kỳ
tcpdump: đầu ra dài dòng bị chặn, sử dụng -v hoặc -vv để giải mã giao thức đầy đủ
nghe trên bất kỳ loại liên kết nào LINUX_SLL (Linux cook), chụp kích thước 262144 byte
15:05:48.120717 IP [publicIPsystem1].56200 > 172.17.0.3.56100: UDP, chiều dài 128
15:05:48.120871 IP 10.13.18.2 > 192.168.1.1: ICMP echo request, id 747, seq 1, độ dài 64
15:05:48.120963 IP 172.17.0.3 > 192.168.1.1: ICMP echo request, id 747, seq 1, độ dài 64
15:05:48.121955 IP 192.168.1.1 > 172.17.0.3: ICMP echo reply, id 747, seq 1, độ dài 64
15:05:48.122054 IP 192.168.1.1 > 10.13.18.2: ICMP echo reply, id 747, seq 1, độ dài 64
15:05:48.122246 IP 172.17.0.3.56100 > [publicIPsystem1].56200: UDP, chiều dài 128
15:05:53.160617 ARP, Yêu cầu ai có 172.17.0.1 cho biết 172.17.0.3, độ dài 28
15:05:53.160636 ARP, Yêu cầu ai có 172.17.0.3 cho biết 172.17.0.1, độ dài 28
15:05:53.160745 ARP, Trả lời 172.17.0.3 is-at 02:42:ac:11:00:03, độ dài 28
15:05:53.160738 ARP, Trả lời 172.17.0.1 is-at 02:42:24:e5:ac:38, chiều dài 28
15:05:58.672032 IP [publicIPsystem1].56200 > 172.17.0.3.56100: UDP, chiều dài 32

vì vậy, có vẻ như các gói được xử lý khác với vùng chứa 2 tùy thuộc vào thứ mà tôi hiện đang thiếu.. nó có thể là một vấn đề iptables?


nhập mô tả hình ảnh ở đây

Trang web 1 Trang web 2
Mạng 1 dải IP 192.168.10.0/24 192.168.1.0/24
địa chỉ hệ thống máy chủ 192.168.10.100 192.168.1.100
cầu docker0 phạm vi 172.17.0.0/16 172.17.0.0/16
địa chỉ vùng chứa 172.17.0.5 172.17.0.6

Hệ thống 1 - wg0.conf

[Giao diện]
Địa chỉ = 10.13.18.2
Khóa riêng = *khóa riêng*
Cổng nghe = 56200
PostUp = iptables -A FORWARD -i %i -j CHẤP NHẬN; iptables -A FORWARD -o %i -j CHẤP NHẬN; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j CHẤP NHẬN; iptables -D CHUYỂN ĐI -o %i -j CHẤP NHẬN; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Ngang nhau]
Khóa công khai = *khóa công khai*
Điểm cuối = *system2address*:56100
IP được phép = 10.13.18.1/32 , 192.168.1.0/24

Hệ thống 2 - wg0.conf

[Giao diện]
Địa chỉ = 10.13.18.1
Cổng nghe = 56100
Khóa riêng = *khóa riêng*
PostUp = iptables -A FORWARD -i %i -j CHẤP NHẬN; iptables -A FORWARD -o %i -j CHẤP NHẬN; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j CHẤP NHẬN; iptables -D CHUYỂN ĐI -o %i -j CHẤP NHẬN; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Ngang nhau]
# đồng đẳng_casaleuven
Khóa công khai = *khóa công khai*
IP được phép = 10.13.18.2/32 , 192.168.10.0/24
Điểm cuối = *system1address*:56200
jabbson avatar
lá cờ sb
Khi bạn ping 192.168.1.1 từ hệ thống 1 - bạn có thấy các gói đến vùng chứa 1 và để lại nó mà bạn có thể tương quan với các gói gửi đến mà bạn thấy trên vùng chứa 2 không (vì những gì bạn thấy có thể chỉ là vật lưu giữ hoặc thứ gì đó)? WireGuard có bất kỳ nhật ký nào mà bạn có thể xem không? Bảng định tuyến trên vùng chứa 1 trông như thế nào?
lá cờ fr
vâng, tôi đã thử chạy 'tcpdump -ni any' trên cả hai vùng chứa cùng một lúc, đợi vài giây để xác minh rằng không có gói nào khác được ghi lại. Sau đó, tôi chạy 'ping -c 1 192.168.1.1' để chỉ gửi một ping từ hệ thống 1 và tôi thấy các gói đi qua cả hai tcpdump.
lá cờ fr
đã thêm một bài kiểm tra khác trong phần Chỉnh sửa 1
A.B avatar
lá cờ cl
A.B
lưu ý: Tôi hy vọng `eth0` của vùng chứa không liên quan, vì không nên có NAT ở bất kỳ đâu. Vì vậy, tôi không hiểu tại sao lại tồn tại quy tắc này: `iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE` trong `PostUp`
lá cờ fr
quy tắc iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE được linuxserver/wireguard đặt theo mặc định trong cấu hình ban đầu. Nếu tôi xóa chúng khỏi cả PostUp và PostDown trong cả hai vùng chứa, thì tôi không thể ping bất cứ thứ gì nữa.
A.B avatar
lá cờ cl
A.B
Vâng. Dù sao thì điều này không thay đổi bất cứ điều gì đối với câu trả lời tôi đã viết bên dưới. Bạn đã thử à?
lá cờ fr
Vâng, tôi đã thử và nó hoạt động !!! Cảm ơn bạn rất nhiều! Mặc dù vậy, tôi tự hỏi tại sao trò chơi đó lại rất cơ bản để làm cho nó hoạt động. Nếu tôi chạy iptables --list tôi không thấy bất kỳ bảng NAT nào..
Điểm:1
lá cờ cl
A.B

Điều này trông giống như một vấn đề định tuyến.

192.168.1.0/24 qua 172.17.0.5 dev docker0

Lộ trình này không được gợi ý với một địa chỉ nguồn ưa thích. Vì vậy, tự nhiên máy chủ sẽ chọn địa chỉ phù hợp nhất: 172.17.0.1 vì đó là địa chỉ chính trên docker0. 172.17.0.1 không có trong danh sách IP được phép của WireGuard ngang hàng (cũng không cần phải có), vì vậy sẽ bị WireGuard từ chối. Nếu nó không bị từ chối, thì dù sao cũng sẽ có sự cố định tuyến trong mạng ngang hàng do hai mạng LAN riêng biệt sử dụng cùng một khối địa chỉ IP.

Thử cái này

  • Hệ thống 1

    tuyến ip thay thế 192.168.1.0/24 qua 172.17.0.5 dev docker0 src 192.168.10.100
    
  • Hệ thống 2

    tuyến ip thay thế 192.168.10.0/24 qua 172.17.0.6 dev docker0 src 192.168.1.100
    

Lưu ý rằng trước khi điều chỉnh này, điều này sẽ không ảnh hưởng đến phần còn lại của mạng LAN, chỉ ảnh hưởng đến hai hệ thống máy chủ Docker.

A.B avatar
lá cờ cl
A.B
Giải thích lại những gì tôi đã viết trong câu trả lời: địa chỉ nguồn được chọn là sai. Tuyến đường này có gợi ý src sử dụng địa chỉ nguồn chính xác từ mạng LAN

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.