IPTables - Cổng tới ip & port khác (từ bên trong)


10

Tôi hiện có một hộp NAS chạy dưới cổng 80. Để truy cập NAS từ bên ngoài, tôi đã ánh xạ cổng 8080 sang cổng 80 trên NAS như sau:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80

Đây là làm việc như một nét duyên dáng. Tuy nhiên, điều này chỉ hoạt động nếu tôi đang truy cập trang web từ bên ngoài mạng (tại nơi làm việc, tại nhà khác nhau, v.v.). Vì vậy, khi tôi nhập mywebsite.com:8080, IPTables thực hiện công việc chính xác và mọi thứ đều hoạt động tốt.

Bây giờ, vấn đề tôi gặp phải là, làm thế nào tôi có thể chuyển hướng cổng này từ bên trong mạng? Tên miền của tôi mywebsite.comtrỏ đến bộ định tuyến của tôi (máy chủ linux của tôi) từ bên trong (10.32.25.1) nhưng tôi muốn chuyển hướng cổng 8080 sang cổng 80 trên 10.32.25.2 từ bên trong.

Có manh mối nào không?

Chỉnh sửa số 1

Cố gắng giúp tạo điều kiện cho câu hỏi này, tôi đặt sơ đồ này cùng nhau. Xin vui lòng cập nhật nếu nó không chính xác hoặc trình bày sai những gì bạn đang tìm kiếm.

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|

@slm Chính xác. Không có gì xảy ra vào 10.32.25.2:8080 vì máy chủ đang ở cổng 80. Từ bên ngoài, NAT chuyển hướng từ cổng 8080 sang cổng 80 trên IP được chỉ định (10.32.25.2). NET -> NAT: 8080 -> 10.32.25.2:80. Tôi cần quy tắc từ bên trong và tôi không biết phải đặt gì ở đó.
David Bélanger

@slm Vâng. Tôi không biết làm thế nào tôi có thể đạt được một cái gì đó như thế. Tôi muốn nói 10.32.25.1:8080chuyển hướng đến 10.32.25.2:80. Quy tắc của tôi ở trên là hoạt động từ bên ngoài, nhưng không phải từ bên trong mạng của tôi. Vì vậy, nếu tôi ở văn phòng, tôi có thể truy cập NAS của mình từ trang web.com:8080 và nó hoàn toàn minh bạch. Từ nhà của tôi, website.com:8080 trỏ đến 10.32.25.1 vì đó là bộ định tuyến của tôi hay máy chủ Linux. Tôi muốn chuyển hướng cổng 8080 sang NAS cũng trên cổng 80 nhưng một lần nữa, một cách minh bạch.
David Bélanger

@slm Vâng, mọi thứ đều ổn và đang hoạt động. Tôi chỉ muốn chuyển hướng cổng 10.32.25.1:8080 đến 10.32.25.2:80 từ mạng nội bộ.
David Bélanger

cũng đề cập đến giao diện như thế nào eth0 10.32.25.2, để chúng tôi có thể viết iptables sử dụng dựa trên giao diện gửi đến
Rahul Patil

Opps xin lỗi, tôi vừa thấy .. bạn đã giải quyết được vấn đề ..
Rahul Patil

Câu trả lời:


13

Cuối cùng tôi đã tìm thấy cách làm. Đầu tiên, tôi phải thêm -i eth1vào quy tắc "bên ngoài" của mình (eth1 là kết nối mạng WAN của tôi). Tôi cũng cần thêm hai quy tắc khác. Cuối cùng, những gì tôi đi kèm:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE

2
Quy tắc thứ hai là không cần thiết, vì quy tắc đầu tiên đã chứa điều đó ...
machineaddict

1
Quy tắc đầu tiên hạn chế chỉ định trước khi nó đến trên giao diện eth1. Quy tắc thứ hai là tổng quát hơn vì nó áp dụng cho tất cả các giao diện. Coi chừng các vòng lặp!
tu-Tái lập Monica-dor duh

4

Bạn cũng quên đề cập rằng chuyển tiếp gói nên được kích hoạt để có thể thực hiện NAT đích. Theo mặc định, nó thường tắt, vì vậy các quy tắc iptables sẽ không hoạt động. Nó có thể được kích hoạt bằng cách phát hành:

echo 1 > /proc/sys/net/ipv4/ip_forward

Cảm ơn bạn rất nhiều vì điều này, tôi đã có thể kéo tóc ra hàng giờ!
ColinM

3

Đầu tiên cho phép chuyển tiếp với

echo 1 > /proc/sys/net/ipv4/ip_forward

Sau đó đặt quy tắc iptable với

IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE

Bạn có thể đặt những dòng này vào /etc/rc.localví dụ. Lưu ý: vì Debian jessie làm cho nó có thể thực thi được và kích hoạt dịch vụ RC.local thông qua

systemctl enable rc-local.service

0

Trước tiên, bạn cần xác minh rằng bạn đã kích hoạt chuyển tiếp:

cat /proc/sys/net/ipv4/ip_forward

Nếu không 1, hãy chạy echo 1 > /proc/sys/net/ipv4/ip_forward.

Nếu bạn muốn lưu lượng truy cập nhấn 10.32.25.1 trên cổng 80 và 443 để được chuyển tiếp đến cổng 80.32.25.2 thì bạn nên sử dụng quy tắc dưới đây:

iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80
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.