Làm thế nào để chuyển tiếp một cổng duy nhất trong Linux?


0

Tôi có hai máy trong mạng của mình (A và B), trong đó A là máy được truy cập trực tiếp từ bên ngoài khi gọi địa chỉ IP của tôi và B là một máy rất mạnh nên phục vụ cho các nhiệm vụ rất nặng.

Tôi muốn chuyển tiếp một cổng nhất định, ví dụ 9090, từ A đến B, vì vậy mọi yêu cầu được gửi đến A trên cổng 9090 đều được chuyển trực tiếp đến B.

Làm thế nào mà có thể đạt được?

(Nếu bất kỳ câu trả lời nào chứa địa chỉ IP cho A hoặc B, vui lòng sử dụng 192.168.2.A / B tương ứng)


Tại sao không chuyển tiếp tất cả lưu lượng truy cập đến bộ định tuyến của bạn trên cổng 9090 đến 192.168.2.B: 9090?
Kruug

@Kruug Tôi thực sự khuyên bạn nên làm điều đó thay vào đó, trong trường hợp không có lý do tại sao không; chuyển tiếp từ bộ định tuyến đến A, và sau đó từ A đến B, giới thiệu một lớp phức tạp bổ sung cần được chứng minh. Mặt khác, tôi cho rằng người đặt câu hỏi có lý do để làm theo cách này; có lẽ anh ta không thể quản trị bộ định tuyến, nhưng đã root trên máy A và do đó có thể sửa đổi các quy tắc iptables ở đó. (Tất nhiên, nếu anh ta không thể quản trị bộ định tuyến và không có quyền root trên máy A, anh ta là SOL.)
Aaron Miller

Lý do là chỉ có cổng 9090 mới có thể truy cập được bởi thế giới bên ngoài. Tất cả các cổng khác chỉ có thể truy cập qua mạng nội bộ
MechMK1

Câu trả lời:


1

Trang này mô tả rất chi tiết cách thực hiện những gì bạn đang theo đuổi. Các lệnh nổi bật, được thực thi trên máy A, là:

root@A # iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 9090 -j DNAT --to 192.168.2.B:9090
root@A # iptables -A FORWARD -p tcp -d 192.168.2.B --dport 9090 -j ACCEPT

Lệnh đầu tiên tạo quy tắc iptables sẽ định tuyến lại các gói đến cổng 9090 của máy A để chuyển đến cổng 9090 của máy B; quy tắc thứ hai cho phép các gói như vậy được chuyển tiếp đến máy B. (Quy tắc thứ hai có thể không cần thiết tùy thuộc vào chính sách được đặt cho chuỗi FORWARD trên máy A, nhưng nó không gây hại gì khi thêm vào, nếu không cần thiết, nó sẽ không cần thiết chỉ đơn giản là không làm gì cả.)

Lưu ý rằng những thay đổi này sẽ không tồn tại trong suốt quá trình khởi động lại trừ khi được thiết lập rõ ràng để làm như vậy. Các bản phân phối khác nhau xử lý việc này theo những cách khác nhau; nếu bạn không thể hoặc không muốn sử dụng bất kỳ phương thức nào mà phân phối của bạn xác định, bạn có thể làm

iptables-save > /etc/network/iptables

(hoặc một số tệp tương tự như vậy nếu không /etc/network/iptables), sau đó thêm đoạn sau vào /etc/rc.local:

iptables-restore < /etc/network/iptables

(sử dụng cùng một đường dẫn như được đưa ra trong iptables-savelệnh) để áp dụng lại các thay đổi khi khởi động.

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.