Chuyển hướng cổng 80 đến 8080 và làm cho nó hoạt động trên máy cục bộ


61

Tôi đã chuyển hướng lưu lượng truy cập cho cổng 80 đến 8080 trên máy của mình với

sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080

Nó hoạt động tốt cho tất cả thế giới ngoại trừ máy của riêng tôi. Tôi là một nhà phát triển và tôi cần chuyển hướng cổng 80 đến 8080 cho chính mình.

IP của tôi là 192.168.0.111

Máy chủ web của tôi chạy trên cổng 8080

Tôi muốn mở trang web từ http://192.168.0.111/thay vì http://192.168.0.111:8080/từ cùng một máy chủ nơi máy chủ chạy.


Xin lỗi vì đã bỏ qua, nhưng mục đích của việc chuyển tiếp cổng 80 đến 8080 là gì?
ma11hew28

2
@mattdipasquale, người dùng bình thường không thể truy cập cổng 80 vì vậy bạn không thể chạy dịch vụ web như bình python như một người dùng bình thường.
Christian

Tại sao bạn không liên kết máy chủ web với cổng 80?
David Foerster

5
Tôi đoán là do người dùng không phải root không thể liên kết với các cổng 80/443 và anh ta không muốn chạy dịch vụ web của mình với quyền root ..
Pavel K.

Câu trả lời:


80

Bạn cần sử dụng OUTPUTchuỗi vì các gói có nghĩa là giao diện loopback không truyền qua PREROUTINGchuỗi. Sau đây nên làm việc; chạy như root:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080

1
Có phải cổng 80 bắt buộc phải được bồi thường? Tôi đã thử giải pháp của bạn, số cổng 8080 của tôi có thể truy cập được nhưng 80 thì không vì thế mà nó không hoạt động. @heemayl
alper

2
Điều này không hoạt động, không chắc tại sao điều này được bình chọn
diyoda_

@Diyoda_ Vui lòng xác định không hoạt động .
heemayl

3
Tôi có thể xác nhận rằng điều này không hoạt động trên Ubuntu 18.04
Ahmed Hamdy

2
Không hoạt động với tôi trên Ubuntu 18.10
Christopher Bradshaw

6

Đơn giản chỉ cần sử dụng iptables cho phép cả cổng 80 và 8080 sau đó chuyển hướng 80 đến 8080, đảm bảo bạn đang gán đúng nic .. ví dụ tôi sử dụng eth0

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

Cảm ơn! Nó hoạt động trên Ubuntu 19
Vladimir Ishenko

1
Sau đó sẽ là tốt đẹp để lưu các thay đổi iptablesudo apt-get install iptables-persistent
Vladimir Ishenko

6

Điều này làm việc cho tôi.

$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

+1 hoạt động với tôi trên Ubuntu 18.04 (ít nhất là với TCP), cổng 7000-> 7001 và máy chủ nghe trên cổng 7001 đã nhận được kết nối đến từ cổng 7000 :)
hanshenrik

1
đảm bảo sử dụng đúng giao diện mạng tho, nó không được gọi eth0trên tất cả các hệ thống
hanshenrik

4

Thay vì iptables, bạn có thể thử: sudo ssh -gL 80:127.0.0.1:8080 localhost


2
Đó là một tùy chọn nhưng nó không chính xác như tôi muốn vì tôi đã có máy chủ web trên cổng 80. Tôi sẽ thích làm điều đó với iptables và giữ cho máy chủ web chạy trên cổng 80. Tôi đoán tôi chỉ phải áp dụng quy tắc cho các bước khác thay vìPREROUTING
Tối đa

Có - điều này sẽ gây ra xung đột cổng nếu bạn có điều gì đó lắng nghe rằng bạn đang chuyển tiếp cổng theo như Max đề xuất. Câu trả lời trên là trường hợp tổng quát hơn.
Csseller

Tôi nhận được "Kết nối bị từ chối" khi thử giải pháp này.
mitchus
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.