Open-Mesh에 익숙하지 않은 분들을 위해 간략한 개요를 소개합니다.
이 시스템은 소형 무선 액세스 포인트를 사용하여 자체 메시 네트워크를 자동으로 구축합니다. 액세스 포인트 중 하나가 유선 LAN을 통해 인터넷에 연결되어 있으면(해당 액세스 포인트를 "게이트웨이"로 설정) 모든 액세스 포인트(및 해당 무선 클라이언트)가 인터넷에 액세스할 수 있습니다.
액세스 포인트는 OpenWRT의 수정된 버전을 실행합니다.
일반적으로 무선 액세스 포인트(노드)에 SSH로 연결하는 유일한 방법은 먼저 게이트웨이에 SSH로 연결하는 것입니다.그 다음에여기에서 SSH를 통해 노드에 연결합니다.
내가 하려는 일:각 무선 노드에 SSH 포트를 직접 열고/전달합니다.
예를 들어, 내 게이트웨이는 10.45.13.220
내 LAN에 있습니다. 첫 번째 무선 노드는 5.12.252.248
메시 네트워크에 있습니다. 즉, 게이트웨이에 로그인할 때 입력하면 무선 노드의 셸이 열립니다. 다음과 같이 무선 노드에 로그인할 수 있기를 원합니다.ssh [email protected]
$ ssh -p 11001 [email protected]
iptables
그래서 다음을 사용하여 포트 전달을 시도했습니다.
$ 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`
나는 이것이 이루어지고 있다는 것을 안다.무엇위 명령을 입력하기 전에 10.45.13.220:11001
(네트워크의 다른 컴퓨터에서) SSH를 통해 연결을 시도하면 연결이 거부되기 때문입니다. 그러나 일단 명령이 입력되면,연결 시간이 초과되었습니다.
내가 뭘 잘못하고 있는지 아시나요? 나는 이것에 대해 매우 새로운 것이지만 iptables
이것은 매우 간단해야 할 것 같습니다.
노트:IP 전달이 활성화되었습니다.
편집: 결과 기록
@slm이 제안한 두 가지 규칙에 대한 로깅을 설정한 후 dmesg
다른 Linux 상자에서 10.45.13.220:11001에 연결하려고 하면 다음과 같은 일이 발생합니다.
[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
@slm에서 제안한 대로 새로운 iptables 규칙을 사용합니다.
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
답변1
에는 필요하지 않습니다 ssh
. 다음과 같이 한 호스트에서 다른 호스트로 SSH를 통해 연결할 수 있습니다.
$ ssh -t serverA ssh serverB
예
$ 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
포트를 반드시 전달하고 싶다면 다음 규칙이 효과가 있을 것이라고 믿습니다.
$ 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
여기서 eth1은 외부 인터페이스이고 eth0은 내부 인터페이스입니다.