Điểm:0

Các gói gửi đi Stunnel được sửa đổi một cách kỳ lạ

lá cờ es

Tôi có một hộp với thiết lập hai nics làm cầu nối. Ebtables chuyển hướng lưu lượng truy cập http sang iptables. Địa chỉ ip br0 là 10.10.10.10. Stunnel được thiết lập với transparent = source. Nó chấp nhận các kết nối trên 127.1.1.1:8080 và luôn kết nối với cùng một địa chỉ IP (10.10.20.20) trên cổng 80.

Tôi có các quy tắc iptables sau:

iptables -t nat -I PREROUTING -p tcp --dport 80 -i ens192 -j DNAT --to-destination 127.1.1.1:8080
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j CHUYỂN ĐỔI
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A CHUYỂN ĐỔI -j CHẤP NHẬN

Định tuyến cũng được thiết lập. Nếu một máy khách kết nối với hộp trên cổng 80 thì mọi thứ đều hoạt động. Stunel kết nối với đích (10.10.20.20). Nhưng nếu máy khách có địa chỉ đích khác, stunnel vẫn cố gắng kết nối với 10.10.20.20, nhưng không thể.

Vì vậy, khi tôi theo dõi các Gói thô đến 10.10.20.20, tôi có thể thấy các hành vi khác nhau. Cái được mong đợi:

theo dõi id 71a8325b ip gói OUTPUT thô: oif "br0" ip saddr 10.10.10.10 ip daddr 10.10.20.20 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 28971 ip length 60 tcp sport 51408 tcp dport 80 tcp flags == syn cửa sổ tcp 64240
theo dõi id 71a8325b ip thô Quy tắc OUTPUT meta l4proto tcp ip Daddr 10.10.20.20 gói truy cập 37 byte 3265 meta nftrace set 1 (tiếp tục phán quyết)
theo dõi id 71a8325b ip raw OUTPUT phán quyết tiếp tục
theo dõi id 71a8325b ip raw OUTPUT chính sách chấp nhận
theo dõi id 71a8325b bộ lọc ip Gói ĐẦU RA: oif "br0" ip saddr 10.10.10.10 ip daddr 10.10.20.20 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 28971 ip length 60 tcp sport 51408 tcp dport 80 tcp flags == syn cửa sổ tcp 64240
dấu vết id 71a8325b bộ lọc ip Phán quyết ĐẦU RA tiếp tục
theo dõi id 71a8325b bộ lọc ip Chấp nhận chính sách OUTPUT
theo dõi id 71a8325b gói đầu ra của bộ lọc inet: oif "br0" ip saddr 10.10.10.10 ip daddr 10.10.20.20 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 28971 ip giao thức tcp ip chiều dài 60 tcp sport 51408 tcp dport 80 tcp flags == cửa sổ tcp đồng bộ 64240
dấu vết id 71a8325b kết quả đầu ra của bộ lọc inet tiếp tục
theo dõi id 71a8325b chấp nhận chính sách đầu ra của bộ lọc inet

Và điều bất ngờ, nơi mà stunnel không thể kết nối:

theo dõi id fd9543bc gói ip raw OUTPUT: oif "br0" ip saddr 10.10.10.10 ip daddr 10.10.20.20 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 26448 ip length 60 tcp sport 34188 tcp dport 80 tcp flags == syn cửa sổ tcp 64240
theo dõi id fd9543bc ip raw Quy tắc OUTPUT meta l4proto tcp ip Daddr 10.10.20.20 truy cập gói 52 byte 4540 meta nftrace set 1 (tiếp tục phán quyết)
theo dõi id fd9543bc ip raw OUTPUT phán quyết tiếp tục
theo dõi id fd9543bc ip raw OUTPUT chính sách chấp nhận
theo dõi id fd9543bc bộ lọc ip Gói ĐẦU RA: oif "br0" ip saddr 10.10.10.10 ip daddr 127.1.1.1 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 26448 ip length 60 tcp sport 34188 tcp dport 8080 tcp flags == syn cửa sổ tcp 64240
theo dõi id fd9543bc bộ lọc ip Phán quyết ĐẦU RA tiếp tục
theo dõi id fd9543bc bộ lọc ip Chính sách OUTPUT chấp nhận
theo dõi id fd9543bc gói đầu ra của bộ lọc inet: oif "br0" ip saddr 10.10.10.10 ip daddr 127.1.1.1 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 26448 ip giao thức tcp ip chiều dài 60 tcp sport 34188 tcp dport 8080 cờ tcp == cửa sổ tcp đồng bộ 64240
theo dõi id fd9543bc kết quả đầu ra của bộ lọc inet tiếp tục
theo dõi id fd9543bc chấp nhận chính sách đầu ra của bộ lọc inet

Có vẻ như địa chỉ đích được định vị đích. Nhưng tôi không thể hiểu tại sao và khi nào. Tôi chỉ DNAT trong bảng nat PREROUTING. Theo sự hiểu biết của tôi, gói tin này không nên lặp lại quy tắc này theo bất kỳ cách nào. Và tại sao điều này chỉ xảy ra khi đích ban đầu không phải là địa chỉ IP của hộp? Tôi đang nghĩ, có lẽ stunnel thay đổi gói tin?

Đây là đầu ra iptables-save đầy đủ

# Được tạo bởi iptables-save v1.8.7 vào Thứ Năm ngày 18 tháng 11 22:40:01 năm 2021
*tự nhiên
: CHẤP NHẬN TRƯỚC [14:1295]
:CHẤP NHẬN ĐẦU VÀO [14:1295]
:CHẤP NHẬN ĐẦU RA [2:196]
:CHẤP NHẬN SAU ĐÓ [4:316]
-A PREROUTING -i ens192 -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.1.1.1:8080
LÀM
# Hoàn thành vào Thứ Năm 18 tháng 11 22:40:01 2021
# Được tạo bởi iptables-save v1.8.7 vào Thứ Năm ngày 18 tháng 11 22:40:01 năm 2021
* mangle
:CHẤP NHẬN TRƯỚC [15:1154]
:CHẤP NHẬN ĐẦU VÀO [172:24172]
:CHẤP NHẬN VỀ PHÍA TRƯỚC [0:0]
:CHẤP NHẬN ĐẦU RA [222:44999]
:CHẤP NHẬN SAU ĐÓ [222:44999]
:CHUYỂN HƯỚNG - [0:0]
-A PREROUTING -p tcp -m ổ cắm -j CHUYỂN ĐỔI
-A CHUYỂN ĐỔI -j MARK --set-xmark 0x1/0xffffffff
-A CHUYỂN ĐỔI -j CHẤP NHẬN
LÀM
# Hoàn thành vào Thứ Năm 18 tháng 11 22:40:01 2021

Bất kỳ ý tưởng, làm thế nào tôi có thể tiếp tục với điều này?

A.B avatar
lá cờ cl
A.B
Có vẻ như câu hỏi khác này trở nên lỗi thời? https://serverfault.com/questions/1083810/iptables-modify-output-flow
lá cờ es
Không, câu hỏi khác tập trung vào các khả năng giải quyết với iptables.
Nikita Kipriyanov avatar
lá cờ za
Theo [luồng gói tin](https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg), mọi gói tin được sản xuất bên ngoài được gửi vào định tuyến từ `brute`, nên chạm vào quy tắc `nat PREROUTING` (một lần, vì bảng nat chỉ được duyệt qua cho các kết nối mới), nhưng gói được tạo cục bộ không có cách nào để đạt được quy tắc đó, vì vậy hành vi mà bạn thấy được mong đợi.
lá cờ es
Không, không phải vậy, vì các gói dường như được DNATed là những gói được tạo cục bộ và do đó chỉ đi qua chuỗi OUTPUT.

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