Điểm:0

Sử dụng fwmark trong iptables trên vùng chứa đang chạy trong Azure K8S

lá cờ gl

Tôi có một trường hợp sử dụng kỳ lạ, trong đó một nhóm chạy trong Azure Kubernetes cần định tuyến lưu lượng truy cập từ các cổng cụ thể đến các mục tiêu cụ thể thông qua một đường hầm VPN chuyên dụng. Nhưng những mục tiêu đó là các IP riêng và do đó có thể có cùng một IP cho các mục tiêu khác nhau. Nhóm bên cạnh định tuyến cũng là Máy chủ OpenVPN nơi các mục tiêu kết nối với. Một ví dụ:

Truyền thông đến cổng 10 được định tuyến đến IP 10.0.0.4:80 thông qua VPN IP 10.118.0.2

và đồng thời chúng ta có thể có:

Truyền thông đến cổng 20 được định tuyến đến IP 10.0.0.4:80 thông qua VPN IP 10.118.0.3

Mặc dù IP mục tiêu giống nhau, nhưng chúng là các máy khác nhau. Vì vậy, để đạt được điều này, tôi đã đưa ra giải pháp khả thi này:

/sbin/iptables --table mangle --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump MARK --set-mark "10"
/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump DNAT --to-destination "10.0.0.4:80"
/sbin/ip quy tắc thêm ưu tiên "10" từ tất cả fwmark "10" tra cứu "10"
/sbin/ip route thêm "10.0.0.4" qua "10.118.0.2" bảng 10

Điều này sẽ cho phép cả hai giao tiếp hoạt động cùng lúc với lưu lượng được định tuyến đến đúng máy. Nhưng những gì tôi thấy là các gói được đánh dấu, trong bảng mangle. Nhưng sau đó không bao giờ đến được các bảng NAT. Tôi phát hiện ra rằng nó có liên quan đến rt_filter. Thêm về điều đó dưới đây. Hiện tại, và nó đang hoạt động, là như thế này:

/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump DNAT --to-destination "10.0.0.4:80"
/sbin/ip định tuyến thêm "10.0.0.4" qua "10.118.0.2"

Tuy nhiên, nếu một tuyến thứ hai được thiết lập, giống như trong ví dụ đầu tiên, lệnh sẽ như sau:

/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "20" --jump DNAT --to-destination "10.0.0.4:80"
/sbin/ip định tuyến thêm "10.0.0.4" qua "10.118.0.3"

Điều này sẽ tạo một tuyến đường khác trong Bảng tuyến đường chính cho cùng một mục tiêu. Nhưng sau đó, người dùng khi truy cập 192.168.0.100 có thể được định tuyến đến máy được kết nối với 10.118.0.3 hoặc 10.118.0.2.

Bên cạnh các quy tắc này, đối với tất cả chúng, quy tắc này luôn được bật để cho phép lưu lượng truy cập quay lại giao diện tap0 nơi giao tiếp với 10.118.0.X:

iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE

Thật không may, tôi không thể biết IP nguồn người dùng, nếu không thì việc giải quyết sẽ rất đơn giản. IP nguồn cho bất kỳ giao tiếp nào đến cổng này sẽ luôn giống nhau vì giao tiếp cần phải đi qua một dịch vụ khác che dấu IP nguồn thực.

Tôi đã thấy trong các chủ đề khác rằng để đánh dấu các gói đến trong vùng chứa/nhóm, tôi cần tắt rt_filter. Tuy nhiên tôi không thể làm điều đó, nó nói rằng đó là một hệ thống tệp chỉ đọc và tôi không biết liệu có thể thay đổi điều đó trong Cụm Azure Kubernetes hay không.

Có giải pháp nào khác ngoài việc đánh dấu các gói không? Hay còn thiếu thứ gì khác liên quan đến việc đánh dấu gói tin?

neomax avatar
lá cờ gl
Chỉ muốn thêm rằng với bộ quy tắc/giải pháp đầu tiên, tôi có thể thấy lưu lượng truy cập với tcpdump trên giao diện tap0 đi từ 10.118.0.1 đến 10.0.0.4, nhưng sau đó không đến máy gọi 192.168.0.100:10. nó chỉ không nhận được bất kỳ phản ứng.
Điểm:1
lá cờ gl

Vì vậy, cuối cùng tôi đã có giải pháp. Sự cố xảy ra với việc xáo trộn các gói trong PREROUTING. Xáo trộn các gói trong POSTROUTING (do đó, khi thoát khỏi eth0), sau đó chúng có thể quay lại từ tap0 đến eth0 rồi đến máy khách. Kết quả cuối cùng trông như thế này:

/sbin/iptables --table mangle --insert POSTROUTING --destination "192.168.0.100" -o eth0 -p tcp --dport "10" --jump MARK --set-mark "10"
/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump DNAT --to-destination "10.0.0.4:80"
/sbin/ip quy tắc thêm ưu tiên "10" từ tất cả fwmark "10" tra cứu "10"
/sbin/ip route thêm "10.0.0.4" qua "10.118.0.2" bảng 10

Đă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.