Tại sao SNAT xảy ra trong chuỗi POSTROUTING và DNAT trong chuỗi PREROUTING?


8

Tại sao SNAT(sửa đổi IP nguồn và / hoặc cổng) xảy ra trong chuỗi natbảng POSTROUTING, tức là sau khi định tuyến? Và tại sao DNAT(sửa đổi cổng / cổng IP đích) xảy ra trong PREROUTINGchuỗi? Tôi đoán sau là bởi vì có thể có nhiều NIC trong PC với các mạng riêng khác nhau và PC không biết cách định tuyến gói nếu địa chỉ IP đích vẫn là địa chỉ có thể định tuyến được? Tuy nhiên, vì SNATtôi không thể thấy lý do tại sao điều này không thể diễn ra PREROUTING.

Câu trả lời:


4

Thông thường, tiêu chí chính cho SNAT là "lưu lượng truy cập đi ra một giao diện nhất định" (nghĩa là -o eth0). Giao diện nào gói tin sẽ được xác định bằng cách định tuyến, vì vậy để áp dụng tiêu chí đó, bạn cần chạy nó trong POSTROUTINGngữ cảnh.

DNAT viết lại địa chỉ đích của gói, nghĩa là nó có thể ảnh hưởng đến nơi gói đến - ví dụ, gói có vẻ như được định sẵn cho cổng có thể cuối cùng được viết lại để đi đến máy trên mạng. Vì bạn muốn định tuyến có thể đưa điểm đến được viết lại vào tài khoản khi nó đưa ra quyết định, để gói thực sự đi đến nơi cần đến, DNAT nên chạy trong PREROUTINGngữ cảnh.


1
Thật vậy, điểm tốt! Vì vậy, SNATkhông thể xảy ra trong PREROUTINGchuỗi vì điều này có nghĩa là tất cả các gói được xử lý SNATtrong khi thực tế điều này chỉ được mong muốn ví dụ cho giao diện phải đối mặt với Internet? Và DNATcần phải xảy ra PREROUTINGvì IP đích bị thay đổi và do đó nó cần phải xảy ra trước khi quyết định định tuyến để được định tuyến qua giao diện (LAN-face) chính xác?
Martin

5

Tôi khá chắc chắn rằng mọi thứ đến từ máy cục bộ không bao giờ đi qua PREROUTINGbàn, như đã thấy trong hình ASCII tuyệt vời này .


Vâng, nhưng điều này có quan trọng không? Ý tôi là bạn sẽ DNATchỉ làm trong trường hợp PC hoạt động như một bộ định tuyến và ít nhất một trong các mạng LAN sử dụng địa chỉ IP riêng.
Martin

Điều quan trọng là bởi vì bạn hỏi tại sao bạn không thể làm SNATtrong preroutingvà tôi đã trả lời - gói có nguồn là máy cục bộ không bao giờ truy cập bảng đó. Đó là lý do tại sao nó không thể.
Aaron D. Marasco

Ok, nhưng trong trường hợp nào bạn sẽ làm SNATcho một lưu lượng truy cập đến từ máy cục bộ? Ví dụ: giả sử có PC có eth1mặt LAN (địa chỉ IP 10.10.10.1/24) và eth0phải đối mặt với Internet (địa chỉ IP 198.51.100.1/24)- tất cả lưu lượng truy cập từ máy này sang Internet sẽ chỉ sử dụng 198.51.100.1 như một địa chỉ IP nguồn và không SNATcần thiết. IMHO SNATchỉ cần thiết trong trường hợp lưu lượng truy cập chảy qua PC và sau đó nó đi qua PREROUTING. Hay tôi đang thiếu một cái gì đó?
Martin

2

Như tên chuỗi gợi ý, ban đầu PREROUTINGđược thực hiện khi một gói được nhận và do đó được định tuyến dựa trên nơi nó sẽ đến (đích). Sau khi tất cả các quy tắc định tuyến khác đã được áp dụng, POSTROUTINGchuỗi sẽ xác định nơi nó đi dựa trên nơi nó đến (nguồn).

Ví dụ, trên máy chủ của tôi, các cổng đến sẽ được chuyển tiếp (NATed) đều được xác định trong PREROUTINGchuỗi như DNATvà tất cả các gói đến từ giao diện NAT, đi qua POSTROUTINGchuỗi như SNAT, và do đó (trong trường hợp này), đi thông qua FORWARDchuỗi lọc .


0

Khi thực hiện bất kỳ thao tác gói nào trong Linux, đường dẫn thông thường từ phối cảnh chuỗi là PREROUTING bị đánh là chuỗi đầu tiên và POSTROUTING là chuỗi cuối cùng trong đường dẫn gói. Có nhiều cấu hình mà một bộ định tuyến thường có, thậm chí bao gồm một số chuyển đổi như lựa chọn đường hầm VPN IPsec cho một luồng cụ thể. Thông thường với SNAT, ý định là gửi gói tin có địa chỉ có thể đến được bởi các máy chủ được kết nối trong mạng công cộng. Những thay đổi như vậy được thực hiện đối với gói khi nó sắp rời khỏi bộ định tuyến, tức là mức ĐIỂM ngay trước OUTPUT để tránh mọi sự trộn lẫn của các Địa chỉ IP. Tương tự theo hướng ngược lại, điều đầu tiên bộ định tuyến mong đợi là xem luồng thực tế để tất cả các quyết định theo cấu hình có thể được áp dụng khi gói đi qua ngăn xếp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.