Z jakiegoś powodu zawsze interesowało mnie robienie (tutaj wstaw czynność) używając protokołów sieciowych zaprojektowanych do czegoś zupełnie innego. Wcześniej napisałem p2mind, prototyp sieci wymiany plików po protokole XMPP i HTTP, starającej się omijać firewalle. Intensywnie testowałem tunelowanie ruchu po DNS. Teraz spodobał mi się protokół Tox i postanowiłem napisać jakąś zabawkę która go używa, żeby nie wyjść z wprawy w programowaniu w C.
Napisałem więc Tuntox, program który pozwala tworzyć połączenia TCP do komputerów za firewallem. Zamiast z adresem IP, klient łączy się z ToxID - ciągiem znaków wyglądającym mniej więcej tak: 391464D54475F6092D477A91E4773F683B682596C6AF6B5B95BC26AA2045C9005FF6AC3479EF. Program jest dość prosty w użyciu: na "serwerze" - komputerze, do którego chcemy się łączyć - odpala się po prostu polecenie "tuntox", kopiuje jego ToxID i zapomina o całej sprawie.
Funkcję programu klienckiego pełni ten sam plik, odpalony z innymi parametrami. Starałem się wzorować parametry na SSH (które również umożliwia przekierowywanie portów): żeby przekierować port 22 zdalnego komputera na lokalny port 2222, należałoby odpalić:
tuntox -i 391464D54..... -L 2222:localhost:22
Funkcji jest więcej: proste zabezpieczenia (PSK, filtrowanie ToxID), tryb przekierowania stdin/stdout (do użycia z ProxyCommand w SSH), udało mi się nawet zestawić VPN pomiędzy dwoma komputerami w dwóch różnych LANach - ale to już tylko ciekawostka, nie polecam do codziennego używania.
Program jest na Githubie, i dodatkowo zmirrorowany. Dla wygody - z każdej wersji buduję statyczne binarki na Linuxa x86 i x86_64.
Tuntox miał w zasadzie być zabawką którą zapomnę w tydzień po napisaniu, ale jakoś tak się stało że na moim Githubie więcej gwiazdek od niego zebrał tylko Celery-PHP, ludzie zaczęli zgłaszać błędy i nawet wysyłać jakieś patche, a ja zastanawiam się nad napisaniem modułu SOCKS5 (działającego jak opcja -D w SSH) - więc wypadałoby zostawić jakiś ślad również w polskim internecie.
