무선 셀룰러 데이터 네트워크를 통해 단일 클라이언트 장치에 인터넷 연결을 제공하는 라우터가 있습니다. 이 네트워크는 제한된 비공개 IP 주소를 제공합니다. 모든 것을 셀룰러 네트워크의 장치로 다시 라우팅할 수 있도록 네트워크 외부에서 고정 IP 주소를 얻고 싶습니다.
임베디드 장치이기 때문에 공간이 제한되어 있습니다(여기서는 약 500kB 필요). 인터넷은 가격이 매우 비싸기 때문에 트래픽을 너무 많이 소모할 수 없습니다.
먼저 iproute2를 사용하여 IPIP 터널을 만들어 보았습니다. 서버에서는 라우터가 수신하는 개인 주소가 아닌 라우터의 송신 IP를 원격 IP로 사용합니다. 라우터가 터널을 통해 서버와 통신하면 서버가 응답할 수 있기를 바랍니다. 그렇지 않다.
dropbear SSH를 시도해보고 범용 터널링을 할 수 없다는 것을 알았지만 iptables를 사용하면 이 문제를 해결할 수 있을 것 같습니다. 그러나 SSH 링크를 여는 것만으로도 초당 약 150바이트를 소비하는 것으로 보입니다.
nc도 시도했지만 통신이 한 방향으로만 진행되므로 서버에 대한 연결을 시작할 수는 있지만 정보를 반환할 수는 없습니다.
OpenSSH 및 OpenVPN은 너무 커서 장치에 설치할 수 없습니다(둘 다 약 1MB).
다음 시도는 서버에 대해 영구 소켓을 열어두고 iptables를 사용하여 트래픽을 프로그램으로 라우팅하는 프로그램을 작성하는 것일 수 있습니다. 먼저 다른 아이디어가 있는지 확인하고 싶었습니다.
그럼 어떤 생각이 드나요?
답변1
IPIP 터널에 사용될 수 있는 유일한 NAT는 일대일 NAT이며, 이는 분명히 셀룰러의 경우에는 해당되지 않습니다.
이 "초당 150바이트의 SSH 연결 열기" 상황은 매우 이상하므로 조사해야 합니다. 나에게는 OpenSSH -> OpenSSH 세션에서는 이와 같은 일이 발생하지 않으며(피할 수 없는 연결 유지가 있지만 실제로는 NAT 뒤에 있을 때 이를 원함) 실제로 트래픽이 전달되지 않는 한 그렇게 할 이유가 없습니다.
netcat은 단방향이고 netcat으로 시작된 TCP 세션은 양방향이라고 잘못 생각합니다.
어떤 방법으로든(아마도 서버에 netcat과 TCP 리스너가 있을 수도 있음) 양방향 스트림을 얻고 거기에서 PPP를 실행하는 것이 좋습니다. 당신은 모든 것을 얻습니다일반적인 단점TCP를 통해 IP를 실행하지만 전혀 연결되지 않는 것보다 낫습니다.
서버에서 빠른 테스트를 수행할 때 효과가 있었던 방법은 다음과 같습니다.
server:~$ sudo pppd noauth passive pty "nc -lp 9999" debug nodetach
클라이언트 측에서:
client:~$ sudo pppd noauth pty "nc server 9999" debug nodetach
전화 접속 의미론은 휴대 전화 장치에 단순히 접근할 수 없는 상황에도 유용한 모델을 제공한다고 생각합니다.
IP 연결을 실행한 후에는 IPIP 또는 1:1 NAT를 사용하여 플레이하는 것을 고려할 수 있습니다.