Làm cách nào để chuyển tiếp / chuyển hướng cổng trên Debian?


12

Tôi có hai câu hỏi.

Câu hỏi 1: Máy debian của tôi có giao diện eth3 với ip 192.168.57.28. Nếu ai đó cố gắng kết nối với 192.168.57.28:1234, làm cách nào để chuyển hướng yêu cầu sang máy khác: 192.168.57.25:80?

Câu hỏi 2: Nếu máy debian của tôi có hai giao diện: eth3 với 192.168.57.28 và ppp0 với một số IP động và ai đó cố gắng kết nối qua ppp0 trên cổng 1234, làm cách nào để chuyển hướng yêu cầu đến 192.168.57.25:80?

Tôi đã thử điều này:

$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward

nhưng nó không hoạt động.

Câu trả lời:


12
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE

Cái đầu tiên xác định rằng tất cả các kết nối tcp đến tới cổng 1234 phải được gửi đến cổng 80 của máy bên trong 192.168.57.25. Quy tắc này một mình không hoàn thành công việc vì iptables từ chối tất cả các kết nối đến. Sau đó, chúng tôi chấp nhận kết nối đến cổng 1234 từ eth3 kết nối Internet với IP publich theo quy tắc thứ hai. Chúng tôi thêm quy tắc thứ hai trong chuỗi FORWARD để cho phép chuyển tiếp các gói tới cổng 80 của 192.168.57.25.

EDIT: Đã thêm vào.

Để theo dõi kết nối. nếu không, máy chủ bên ngoài sẽ thấy IP bên trong 192.168.57.25 mà anh ta không có đầu mối.

EDIT2: Chỉ cần có gợi ý rằng nó phải là - đến đích thay vì --to (sry)


Tôi đã thử đề xuất của bạn, nhưng nó không hoạt động. Tôi có thể duyệt đến 192.168.57.25 và trang web trả về, nhưng duyệt đến 192.168.57.28:1234 không hoạt động.
Dánjal Salberg Adlersson

@ DánjalSalbergAdlersson Cập nhật bài viết của tôi (đã bỏ lỡ điều gì đó. Sry.)
Daywalker

3
Tôi đã thử đề xuất của bạn, nhưng nó không hoạt động. Sau đó, tôi đổi thành cái cuối cùng này: iptables -A POSTROUTING -t nat -j MASQUERADE, sau đó nó hoạt động!
Dánjal Salberg Adlersson

8

Cảm ơn Daywalker và Dánjal Salberg Adlersson. Sau nhiều giờ chửi thề, chuyển tiếp cổng với iptables cuối cùng cũng hoạt động. (đã thử nghiệm trên Debian)

bash-script

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=eth0
PORT_IN=40022

IP_OUT=172.16.93.128
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE

Có bất kỳ lý do nào khiến "-s 192.168.57.25" bị bỏ qua khỏi dòng POSTROUTING không?
edwardsmarkf

cũng bỏ qua "-o eth3"
edwardsmarkf

tôi thấy các -s và -o trên dòng POSTROUTING dường như là tùy chọn. Bạn có suy nghĩ gì về việc sử dụng SSL không? tôi đã đặt câu hỏi ở đây, tham khảo kịch bản của bạn: superuser.com/questions/1387902/ trên
edwardsmarkf
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.