Если оба компьютера за натом

    На написание данной заметки натолкнули некоторые комментарии к недавней статье “Не слишком щепетильный способ продажи ПО” о программе TeamViewer. Попытаюсь вкратце описать один не слишком сложный и в то же время достаточно универсальный способ “зайти” с одного компьютера на другой, если они оба за натом.

    Собственно, к делу. Для того, чтобы установить соединение, на каждом компьютере создадим IPv6-туннель при помощи какого-либо сервиса туннелирования IPv6. Оба компьютера при этом получат полноценный IPv6 адрес и между ними можно будет установить соединение по ssh, vnc или другой технологии. Конечно, если у обоих компьютеров уже есть IPv6 адрес, предоставленный провайдером, никаких телодвижений по поднятию туннелей производить не нужно. К сожалению, подавляющее большинство провайдеров к IPv6 еще не готовы и наличие у пользователя прямого доступа в интернет по IPv6 – большая редкость.

    Самым известным сервисом туннелирования IPv6, пожалуй, является вот этот от Hurricane Electric. Для поднятия туннеля нужно пройти регистрацию, получить сеть IPv6 и скопипастить команды для Вашей системы из браузера в консоль.

    Есть и более простой способ поднятия туннеля, используя сервис туннелей Freenet6. Сервис предоставляет анонимный доступ (можно не регистрироваться). Для поднятия IPv6-туннеля следует загрузить и запустить программку с их сайта. Для моей kubuntu она уже была в репозитории:

    sudo apt-get install gogoc
    

    gogoc при запуске соединяется с сервером и конфигурирует IPv6-туннель. Вот как он выглядит у меня:

    $ sudo ifconfig
    ...
    tun       Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
              inet6 addr: 2001:5c0:1400:a::45f/128 Scope:Global
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1280  Metric:1
              RX packets:7824 errors:0 dropped:0 overruns:0 frame:0
              TX packets:5269 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:500 
              RX bytes:5057840 (5.0 MB)  TX bytes:771574 (771.5 KB)
    ...
    $ sudo ip -6 route show
    2001:5c0:1400:a::6a1 dev tun  proto kernel  metric 256  mtu 1280
    2000::/3 dev tun  metric 1 
    fe80::/64 dev tun  proto kernel  metric 256 
    default dev tun  metric 1 
    ...
    


    2001:5c0:1400:a::45f – IPv6 адрес, выданный мне Freenet6.

    После проделывания аналогичной процедуры на второй машине, можно «зайти» с одной на другую.

    $ ssh user@2001:5c0:1400:a::45f

    или так
    krdc vnc ipv6

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 31

      +1
      Только для Linux или поддерживаются и другие ОС?
        +1
        Приятель пользовался под MacOS X и под Windows.
          0
          Если вы про туннелирование IPv6, то да. Например, в uTorrent интегрирован протокол Teredo (реализация под Linux — Miredo): вы можете подключить туннелирование и раздавать торренты по нему, получив белый IP-адрес
            0
            К тому же настраивается намного проще. Под linux нужно только поставить пакет miredo — и вы уже в сети.
            И в windows вроде есть из коробки чуть ли не с версии XP.
          +11
          Есть еще один метод — Hole Punching (в частности — UDP Hole Punching). Преимущество его в том, что трафик не гоняется через третьи сервера, а идет наиболее коротким путем. Сейчас нет сил писать подробную статью про это дело, поэтому я просто оставлю здесь некоторые ссылки. Если читателям хабра тема покажется интересной, но не раскрытой, то в будущем и полноценную статью оформлю.

          Раз: en.wikipedia.org/wiki/UDP_hole_punching
          Два: campagnol.sourceforge.net/
            +2
            три: samy.pl/pwnat/ (мощная штука)
              0
              В случае teredo-клиентов с обоих сторон трафик как раз идёт напрямую. Под капотом как раз hole punching, но установка-настройка-подключение проще.
                0
                Четыре: Hamachi (так же использует UDP hole punching).
                0
                Спасибо, не знал про такое.
                А полную статью, где расписано, как и что настраивать было бы интересно почитать.
                  0
                  Плюс метода в том, что ничего не надо настраивать. По-умолчанию выдается один ipv6 адрес при старте демона.
                  0
                  А чем переадресация портов на роуторе не подходит? Я просто в последнее время много разных предложений читаю по данному вопросу, но все никак не могу понять, чем они лучше переадресации…
                    +2
                    А если нет доступа к роутеру? Или в роутере нет такой фичи? И данный метод универсален и быстр.
                      0
                      Ок, понял, благодарю.
                      +1
                      А если у провайдера нат?
                        +2
                        Провайдеры обычно не дают доступа к своим роутерам :)
                          0
                          не всегда имеется возможность пробрасывать порты (NAT может пренадлежать провайдеру, использоватся в офисе, в т.ч. в гостевом, и т.п.)
                          +3
                          Автор забыл один довольно существенный момент, упоминая Hurricane Electric: HE работает поверх ipv6ip туннелирования (протокол 41), потому через NAT/PAT он действовать не может в принципе. Но автор задействовал не HE, а Freenet6, способный работать и поверх UDP/TCP, так что такая схема действительно будет работать. С одним недостатком — на роутере такой туннель терминировать не удастся (хотя не исключаю, что кому-то удалось прикрутить клиент к хомячковым роутерам).

                          Ну и недостаток американских туннельных брокеров: трафик из России в Россию ходит через США. Вот пинг первого хопа:

                          #ping 2001:470:1F0A:3B5::1

                          Type escape sequence to abort.
                          Sending 5, 100-byte ICMP Echos to 2001:470:1F0A:3B5::1, timeout is 2 seconds:
                          !!!
                          Success rate is 100 percent (5/5), round-trip min/avg/max = 48/50/60 ms
                            0
                            Хомячковые роутеры в лучшем случае 6rd поддерживают, и с ним тоже без поддержки у ISP никак. Но с dd-wrt и прочими альтернативными прошивками возможны варианты.
                              0
                              «Хомячковые роутеры» как раз приводились как пример железок, к которым народные умельцы что угодно могут прикрутить вплоть до кофеварки…
                              Сильно удивлюсь, если какой-нибудь dd-wrt не держит вполне себе стандартный ipv6ip. Ну а любые более приличные роутеры прямо-таки обязаны с ним дружить.

                              Про 6rd впервые слышу, почитал, не понял, какая там требуется поддержка от CE помимо базового знания про IPv6…
                            0
                            Я так торренты пробовал раздавать через IPv6 (в обход NAT), правда, подключенных пиров очень мало.
                            rutracker.org/forum/viewtopic.php?t=1963378

                              +3
                              1. если нет уже своего VPS, покупаем новый — например, на www.buildyourvps.com/ минимальная конфигурация стоит около $35 в год.

                              2. компьютер за натом устанавливает SSH соединения на ваш VPS, и при этом пробрасывает туннель с порта, например, 2101 на VPS на свой порт 22

                              3. направив ssh-клиента на VPS порт 2101, вы приземляетесь на тот компьютер, который за натом.

                              вот тут я описал в подробностях, так как использую это в работе.
                                +5
                                Если использовать VPS — то, как мне кажется, лучше для тунелей OpenVPN использовать, а не ssh.
                                  +2
                                  у исходящего трафика ssh, как правило, меньше препятствий через корпоративные фаерволлы :)
                                    +1
                                    Ничто не мешает пустить OpenVPN по тому же 22-му порту.
                                    У меня правда на 443-м…
                                      0
                                      можно, но это требует нестандартных манипуляций на сервере. У меня VPS в стандартной конфигурации, со стандартным ssh демоном. Опять же, 443-й порт тоже занят обычной своей работой :)
                                        0
                                        вот тут я расписал в деталях на хабре habrahabr.ru/post/147347/
                                  0
                                  Спасибо за ещё один способ, но чуда не произошло: если оба компьютера за натом, то нужен третий.
                                    +1
                                    это да :)
                                    0
                                    Я пользуюсь другим способом — отдельная машинка с рельным IP, на нее ssh з реверсивным ssh-тунелем, с другой машынки за NAT — прямой тунель
                                      0
                                      Мне больше всего метод 6to4 пока нравится.
                                      Из плюсов — низкий пинг до ближайшего anycast-гейта — 192.88.99.1
                                      Из минусов — нужно поднимать на машине с белым ip или хотя бы DMZ.
                                      В dd-wrt можно настроить.
                                        0
                                        Интересно ведь узнать, возможен ли туннель, в случае если кроме NAT используется еще и прокси-сервер?

                                        Only users with full accounts can post comments. Log in, please.