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.