Iptables chuyển hướng đến localhost?


13

Giả sử tôi có một mạng với một máy chủ định tuyến tất cả các kết nối từ bên trong mạng tới Internet. Làm cách nào tôi có thể thiết lập iptables để thay vì định tuyến các kết nối đến Internet, thay vào đó, định tuyến chúng đến cổng localhost 8080. Mọi sự trợ giúp đều được đánh giá cao.


Vấn đề là với việc chuyển hướng đơn giản (địa chỉ IP đích NAT), bạn sẽ mất địa chỉ IP đích ban đầu. Bạn có muốn thiết lập proxy HTTP trong suốt hay nó cũng nên xử lý các giao thức khác ngoài HTTP?
pabouk

Không thành vấn đề nếu nó trong suốt hay không
DankMeme

Chuyển hướng tất cả lưu lượng truy cập đến một proxy cơ sở cho proxy minh bạch :)
pabouk

Đây là một câu trả lời khác thực sự giúp tôi hiểu: unix.stackexchange.com/questions/111433/NH
Wren T.

Câu trả lời:


6
sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080

1
không sử dụng chữ đậm ....

Cảm ơn! Tôi chưa thử điều này nhưng tôi nghi ngờ những gì tôi đã thiếu là lệnh chuyển tiếp ip. Và lần sau, vui lòng sử dụng khối mã, không in đậm.
DankMeme

@AlexAntonov vui lòng sử dụng khối mã. Chọn văn bản của bạn trong chế độ chỉnh sửa và nhấp vào biểu tượng ngoặc.
DankMeme

@ZoveGames, xin lỗi, đã sửa nó.
Alex Antonov

2
Tôi đã thử nghiệm với điều này. Sysctl ip_forward là không cần thiết. Tuy nhiên, tùy chọn route_localnet ở đây là. Tôi thấy bây giờ đây chính xác là những gì câu trả lời của Juan Cespedes .
Matt Joiner

31

có thể được thực hiện với iptables, nhưng chỉ với kernel> = 3.6.

Bạn sẽ phải làm:

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

ip_forwardlà không cần thiết, bởi vì gói không được chuyển tiếp, nhưng nếu bạn không bao gồm sysctl cho route_localnet(chỉ hoạt động trong hạt nhân> = 3.6), thì gói sẽ bị bỏ bởi vì nó coi đó là "martian", sắp tới từ bên ngoài và có địa chỉ đích là 127.0.0.1


Yup, nó hoạt động
Nick De Greek

Không biết về route_localnet. Vì vậy, trường học cũ và không thể hiểu tại sao ip_forward không hoạt động (nghi ngờ rằng nó không cần thiết nhưng dù sao cũng đã thử).
dmourati

1
Hãy chắc chắn rằng bạn lưu net.ipv4.conf.all.route_localnet=1trong /etc/sysctl.conftrường hợp không tồn tại lâu và sau khi khởi động lại, biến sẽ trở về 0, khiến gói bị giảm. Sau đó, sẽ rất khó để hiểu tại sao bây giờ mọi thứ không hoạt động ... nó đã xảy ra với tôi. ;)
viz

Xin lỗi để necro một câu hỏi cũ nhưng có một ipv6 tương đương net.ipv4.conf.all.route_localnetđể sử dụng với ip6tables?
Kebian
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.