IPTABLES như một bộ định tuyến luôn yêu cầu giả trang / SNAT?


2

Nếu tôi thiết lập hộp linux làm bộ định tuyến phía sau cổng DSL, tôi có cần bật chức năng giả mạo hoặc SNAT không?

Về mặt logic, tôi cho rằng tất cả những gì tôi cần làm là kích hoạt ip_forwarding (đã hoàn thành) nhưng lưu lượng truy cập vào Internet sẽ chết nếu tôi không thực hiện bất kỳ NATing nào.

Cấu hình như sau (xin lỗi cho sơ đồ)

Internet --- [ppp0_DSL bộ định tuyến_eth0] ---- 192.168.1.x ----- [eth0_ubunturouter_eth1] ------ 192.168.2.x

Nếu NAT đang chạy trên bộ định tuyến băng thông rộng, thì tôi cũng sẽ cần nó chạy trên bộ định tuyến Ubuntu?

Dưới đây là cấu hình của iptables bộ định tuyến Ubuntu ...

  # Generated by iptables-save v1.4.21 on Thu Oct 29 12:48:19 2015
*nat
:PREROUTING ACCEPT [10859:2328892]
:INPUT ACCEPT [1002:126271]
:OUTPUT ACCEPT [1256:91484]
:POSTROUTING ACCEPT [638:43890]
COMMIT
# Completed on Thu Oct 29 12:48:19 2015
# Generated by iptables-save v1.4.21 on Thu Oct 29 12:48:19 2015
*filter
:INPUT ACCEPT [5:803]
:FORWARD ACCEPT [127:18532]
:OUTPUT ACCEPT [5:431]
# INPUT to allow ssh and ping from internal network
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT -m comment --comment "ssh on eth1"
-A INPUT -p icmp -j ACCEPT -m comment --comment "allow ping from internal"
-P INPUT DROP
# god table to handle traffic forwarding and test icmp
-N god
-A god -d 8.8.4.4 -j REJECT
-A god -d 8.8.8.8 -j DROP
# forward configured to explicitly route between interfaces - this could be redundant
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -p tcp -j ACCEPT -m comment --comment "all tcp"
-A FORWARD -p udp -j ACCEPT -m comment --comment "all udp"
-A FORWARD -p icmp -j god -m comment --comment "all icmp"
-A FORWARD -i eth0 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-P FORWARD DROP
# output to allow web traffic and icmp from router
-A OUTPUT -o eth1 -p tcp -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-P OUTPUT DROP
COMMIT
# Completed on Thu Oct 29 12:48:19 2015

Cấu hình này tiếp tục giết Internet, nhưng nó luôn hoạt động nếu tôi bao gồm

-A POSTROUTING -o eth0 -j SNAT --to 192.168.1.1

Nhưng tại sao??? Tại sao hộp này chỉ hoạt động với SNAT, không cần thiết vì nó đã có sẵn trên bộ định tuyến DSL?

                • CẬP NHẬT - - - - - - -

Như đã thấy trong các bình luận, Radhil và MichaelB đều đúng. Tôi không tính đến việc thiếu định tuyến trên bộ định tuyến băng thông rộng cho bất kỳ thứ gì ngoài một mạng con (192.168.1.0 trong trường hợp này). Thật không may, bộ định tuyến băng thông rộng cụ thể này không cung cấp phương tiện bổ sung các tuyến tĩnh bổ sung, vì vậy giải pháp của tôi để cho phép định tuyến dựa trên nguồn từ mạng con bên trong trong trường hợp này là sử dụng các bảng PREROUTING để xâu chuỗi lưu lượng.

ví dụ

A PREROUTING -i eth1 -m mac --mac-source xx:xx:xx:xx:xx:xx -j DNAT --to 192.168.2.200

sau đó

-A FORWARD -s 192.168.2.200 -j DROP

Đây rõ ràng là một giải pháp tệ hại (được thực hiện theo cách này vì IPTABLES không cho phép một người DROP trong các bảng TRƯỚC / ĐIỂM, nhưng tôi chỉ đưa nó vào như một ví dụ về khả năng định tuyến dựa trên nguồn trong các trường hợp bị mắc kẹt này.

Câu trả lời:


2

Bộ định tuyến DSL đang chạy NAT của riêng nó trên 192.168.1.0, đúng không? Đó là mạng được thiết lập để xử lý.

Vì vậy, câu trả lời sẽ là nó không biết về bất kỳ mạng 192.168.2.0 nào và do đó không cố gắng NAT. Nó có thể chuyển tiếp lưu lượng truy cập Internet, nhưng Internet sẽ loại bỏ các IP riêng đó ngay lập tức. Có lẽ cũng không có thông tin định tuyến để quay lại hộp của bạn đến phân đoạn mạng thứ 2 của bạn, vì vậy dù sao bạn cũng sẽ không có đường dẫn trở lại, trừ khi bạn thiết lập đó là tuyến tĩnh ở đâu đó và không chỉ ra.

Vì vậy, bạn cần cung cấp cho bộ định tuyến DSL một cái gì đó mà nó mong đợi. Tìm cách thay đổi cài đặt trên NAT thành cả hai phân đoạn và tuyến tĩnh đến Ubuntu của bạn cho 192.168.2.0 hoặc thiết lập NAT trên máy của bạn như bạn đã tìm thấy.


Cảm ơn! Tất nhiên là đúng. Tôi quên tại sao tôi kích hoạt NAT tháng trở lại! Hiện đang cố gắng tìm ra cách để SNAT trên Ubuntu chơi tốt với tính năng lọc. Thật không may, bộ định tuyến DSL không có khả năng thêm các tuyến mạng phụ bổ sung ...
TemperedGlass

@TemperedGlass Đã rất lâu kể từ khi tôi xây dựng một tường lửa từ iptables, nhưng tôi đã có ấn tượng NAT mặc định là một trong những bước cuối cùng được áp dụng. Bạn đã có các quy tắc trạng thái kết nối trong đó, chỉ cần áp dụng các quy tắc cho MỚI theo IP / cổng ban đầu mà bạn mong đợi trước khi NAT tham gia và dịch mọi thứ. Nếu nó không hoạt động, thì ... tôi đã sai và viết lại để mong điều ngược lại.
Radhil

@TemperedGlass - nghĩ rằng đó là SNAT theo postrouting và DNAT theo prerouting? Điều đó sẽ có ý nghĩa nhất đối với tôi.
Radhil

vâng, bạn đúng. Điều đáng nói với tôi là nếu tôi áp dụng bất kỳ bộ lọc nào trong FORWARD bằng cách sử dụng -s 192.168.2.0/24 thì chúng không hoạt động. Tôi có thể nghĩ rằng bảng bộ lọc duy trì trạng thái, ngay cả khi gói được đọc trong POST? Tuy nhiên nếu tôi lọc với -d thì các quy tắc hoạt động hoàn hảo.
TemperedGlass

Erm ... FORWARD như được viết ở đây hiện cho phép mọi thứ theo dòng 2. Có lẽ tôi cần xem bạn đang thêm nó như thế nào. Tôi mơ hồ nhớ việc nhảy -i eth0 -o eth1 và ngược lại với một phụ đề "trong nước" và "hướng ngoại" để giữ cho tất cả thẳng. Có thể cần một cuộc trò chuyện hoặc một diễn đàn vì đây là một hố thỏ dài.
Radhil

1

Điều này là do modem DSL không biết về mạng 192.168.2. *, Khi bộ định tuyến nhận được gói từ 192.168.2.x, có lẽ nó phải trả lời qua cổng mặc định, vì nó không có tuyến đường cụ thể đến đó mạng con.

Nếu bộ định tuyến DSL của bạn có khả năng được định cấu hình với tuyến tĩnh, thì điều đó sẽ khắc phục nó, nếu không, bạn sẽ cần phải cấu hình NAT trên bộ định tuyến, để tất cả lưu lượng truy cập mà bộ định tuyến nhìn thấy bắt nguồn từ mạng cục bộ (như xa như bộ định tuyến DSL thấy)


Tất nhiên! Tôi thực sự đã quên tại sao tôi kích hoạt NAT vài tháng trước - đó là vì lý do này! Cảm ơn! Vấn đề bây giờ tôi gặp phải là một trong việc kích hoạt NAT trên Ubuntu để tôi vẫn có thể thực hiện lọc có ý nghĩa. Bộ lọc gói dựa trên đích nhưng không phải trên nguồn đã bật SNAT! Bất kỳ ý tưởng nguy hiểm? (bộ định tuyến DSL không có cách nào để thêm các tuyến bổ sung - đó là BT Homehub 5)
TemperedGlass

Bạn có thể định cấu hình nó để bất kỳ lưu lượng truy cập nào dành cho cổng mặc định đi qua NAT, trong khi bất kỳ lưu lượng Lan nào chỉ được định tuyến đơn giản ...
Michael B
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.