Chuyển tiếp cổng bằng iptables trên Open-Mesh


2

Tổng quan nhanh cho những người không quen thuộc với Open-Mesh:

Hệ thống sử dụng các điểm truy cập không dây nhỏ tự động xây dựng mạng lưới riêng của họ. Miễn là một trong những điểm truy cập được kết nối với internet thông qua mạng LAN có dây (biến điểm truy cập đó thành "cổng"), tất cả các điểm truy cập (và ứng dụng khách không dây của họ) sẽ có quyền truy cập internet.

Các điểm truy cập chạy phiên bản sửa đổi của OpenWRT.

Thông thường, cách duy nhất để SSH vào bất kỳ điểm truy cập không dây (nút) nào là trước tiên SSH vào cổng, sau đó SSH từ đó đến nút.

Những gì tôi đang cố gắng thực hiện: Mở / chuyển tiếp một cổng để SSH vào từng nút không dây trực tiếp.

Ví dụ: cổng của tôi nằm 10.45.13.220trong mạng LAN của tôi. Nút không dây đầu tiên nằm 5.12.252.248trên mạng lưới (tức là gõ ssh root@5.12.252.248trong khi đăng nhập vào cổng sẽ mở một vỏ cho nút không dây). Tôi muốn có thể đăng nhập vào nút không dây như vậy:

$ ssh -p 11001 root@10.45.13.220

Vì vậy, tôi đã thử chuyển tiếp cổng đó iptablesbằng cách sử dụng các lệnh sau:

$ iptables -t nat -A PREROUTING -p tcp -d 10.45.13.220 --dport 11001 \
          -j DNAT --to-destination 5.12.252.248:22

$ iptables -t filter -A FORWARD -p tcp -d 5.12.252.248 --dport 22 -j ACCEPT`

Tôi biết điều này đang làm một cái gì đó bởi vì khi tôi cố gắng SSH đến 10.45.13.220:11001(từ một máy tính khác trên mạng) trước khi nhập các lệnh trên, kết nối bị từ chối. Nhưng một khi các lệnh đã được nhập, kết nối sẽ hết thời gian.

Có ai biết tôi đang làm gì sai không? Tôi khá mới mẻ iptables, nhưng có vẻ như nó khá đơn giản.

Lưu ý: Chuyển tiếp IP đã được bật

EDIT: Đăng nhập kết quả

Sau khi thiết lập ghi nhật ký cho cả hai quy tắc được đề xuất bởi @slm, đây là những gì sẽ dmesgxuất hiện khi tôi cố gắng kết nối với 10,45.13.220:11001 từ một hộp linux khác:

[1015021.850000] IN=br-lan1 OUT= MAC=ac:86:74:0c:fd:00:6c:62:6d:12:85:9d:08:00 \
SRC=10.45.13.246 DST=10.45.13.220 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=16916 DF \
PROTO=TCP SPT=41908 DPT=11001 WINDOW=14600 RES=0x00 SYN URGP=0

[1015021.850000] IN=br-lan1 OUT=br-lan1 MAC=ac:86:74:0c:fd:00:6c:62:6d:12:85:9d:08:00 \
SRC=10.45.13.246 DST=5.12.252.248 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=16916 DF \
PROTO=TCP SPT=41908 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0

[1015022.850000] IN=br-lan1 OUT=br-lan1 MAC=ac:86:74:0c:fd:00:6c:62:6d:12:85:9d:08:00 \
RC=10.45.13.246 DST=5.12.252.248 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=16917 DF \
PROTO=TCP SPT=41908 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0

Các quy tắc iptables mới được sử dụng (theo đề xuất của @ @ slm):

iptables -t nat -A PREROUTING -p tcp --dport 11001 -j LOG --log-level debug
iptables -t nat -A PREROUTING -p tcp --dport 11001 -j DNAT --to 5.12.252.248:22
iptables -A FORWARD -i br-lan1 -p tcp -j LOG --log-level debug
iptables -A FORWARD -i br-lan1 -o bat0.2@bat0 -p tcp -d 5.12.252.248 --dport 22 \
    -j ACCEPT

Câu trả lời:


1

Điều này là không cần thiết với ssh. Bạn có thể ssh thông qua một máy chủ đến một máy chủ khác như vậy:

$ ssh -t serverA ssh serverB

Thí dụ

$ hostname
grinchy

$ ssh -t skinner ssh mulder
Last login: Fri Aug 16 18:19:56 2013 from skinner.somedom.net

$ hostname
mulder.somedom.net
$

iptables

Nếu bạn hoàn toàn muốn chuyển tiếp cổng, tôi tin rằng quy tắc này sẽ thực hiện:

$ iptables -t nat -A PREROUTING -p tcp -d 10.45.13.220 --dport 11001 -j DNAT --to 5.12.252.248:22
$ iptables -A FORWARD -i eth1 -o eth0 -p tcp -d 5.12.252.248 --dport 22 -j ACCEPT

Trong đó eth1 là giao diện bên ngoài và eth0 là giao diện bên trong.


Tuyệt vời, cảm ơn vì sự giúp đỡ! Tôi sẽ không thể thử nó cho đến khi tôi trở lại văn phòng vào thứ Hai, nhưng tôi sẽ cho bạn biết nó diễn ra như thế nào (và đánh dấu là đã trả lời nếu mọi việc suôn sẻ).
Kyle G.

@KyleG. - hãy thử xem, nó có thể cần được điều chỉnh, cho tôi biết và tôi có thể giúp đỡ.
slm

Chỉ cần thử một lần nhưng tôi vẫn gặp vấn đề tương tự. Bạn có biết nếu có bất kỳ nhật ký nào tôi có thể kiểm tra để làm sáng tỏ nơi giao tiếp bị lỗi không? Tôi cũng đang xem xét một cách để thực hiện đề xuất đầu tiên của bạn, nhưng nó không giống như thư viện C # SSH mà tôi đang sử dụng hỗ trợ nhảy như thế.
Kyle G.

Ok tôi đã có nó đăng nhập. Xin vui lòng xem chỉnh sửa câu hỏi của tôi ở trên.
Kyle G.

@KyleG. - bạn đã thích nghi với các quy tắc tôi cung cấp? Nếu vậy bạn có thể thêm chúng vào Chỉnh sửa mà bạn đã thực hiện để tôi có thể thấy cuối cùng bạn đã sử dụng cái gì không?
slm
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.