내 ISP 캐리어급 NAT를 우회하려고 시도 중인데 여전히 외부에서 내 플렉스 서버에 액세스할 수 있습니다.
두 가지 가이드를 찾았습니다.
http://www.donaldsimpson.co.uk/2016/10/24/tunneling-out-of-carrier-grade-nat-cgnat-with-ssh-and-aws/
https://amoss.me/2017/05/port-forwarding-behind-a-carrier-grade-nat/
구현하려면 공용 IP가 있는 digitalocean에서 호스팅하는 우분투 16.04 VM이 있습니다. 내 plex 서버(또한 ubuntu 16.04)에서 원격 디지털 오션 서버로 SSH를 통해 연결할 수 있습니다.
내 Plex 서버에서 다음 명령을 실행합니다.
ssh -nNTv -R 32400:localhost:32400 root@<public IP of remote host>
그리고 화면에서 계속 실행되도록 놔두세요.
터널이 성공했습니다. 원격 호스트에서는 루프백 인터페이스에 대한 netstat 및 nc -v가 있습니다.
root@Ubuntu1604:~/.ssh# nc -v 127.0.0.1 32400
Connection to 127.0.0.1 32400 port [tcp/*] succeeded!
root@Ubuntu1604:~/.ssh# netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:32400 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:32400 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
root@Ubuntu1604:~/.ssh#
그러나 보시다시피 공용 IP를 수신하지 않습니다. 루프백 외에 유일한 활성 인터페이스는 공용 IP 주소가 할당된 eth0입니다. 따라서 :32400에 액세스하려고 하면 remote server public IP
아무것도 얻지 못합니다.
원격 서버가 32400 eth0에서 수신 대기하면서 이를 여전히 localserver:32400으로 전달하도록 하려면 어떻게 해야 합니까?
답변1
이미 빈 바인딩 주소가 있었는데 문제는 다음과 같이 모든 주소에 바인딩하도록 지정해야 한다는 것이었습니다.
ssh -nNTv -R 0.0.0.0:32400:localhost:32400 root@<public IP of remote host>
답변2
에서man 1 ssh
:
-R [bind_address:]port:host:hostport
[…]
기본적으로 서버의 청취 소켓은 루프백 인터페이스에만 바인딩됩니다. 이는 를 지정하여 재정의할 수 있습니다
bind_address
. 비어bind_address
있거나 address 는*
원격 소켓이 모든 인터페이스를 수신해야 함을 나타냅니다. 원격 바인딩 주소 지정은 서버GatewayPorts
옵션이 활성화된 경우에만 성공합니다( 참조sshd_config(5)
).
따라서 먼저 시도하는 가장 쉬운 방법은 빈 값을 지정하는 것입니다 bind_address
.
-R :32400:localhost:32400
이니셜을 참고하면 :
차이가 납니다.