Создание VPN соединения по протоколу ssh (sshuttle)

Thank you for reading this post, don't forget to subscribe!

Sshuttle - дает воз­мож­ность создать VPN соеди­не­ние от вашей локаль­ной маши­ны до уда­лен­ной маши­ны с исполь­зо­ва­ни­ем под­клю­че­ния по ssh. Для рабо­ты необ­хо­дим пакет python вер­сии не ниже 2.3

Для рабо­ты вы долж­ны иметь пра­ва root поль­зо­ва­те­ля на локаль­ной машине, но при этом под­клю­че­ние к уда­лен­но­му сер­ве­ре может быть орга­ни­зо­ван­но с пра­ва­ми обыч­ных непри­ви­ле­ги­ро­ван­ных пользователей.

Воз­мож­но одно­вре­мен­ное под­клю­че­ние сра­зу к несколь­ким уда­лен­ным серверам

Уста­нов­ка

sudo yum install sshuttle

Син­так­сис команды:

sshuttle [options] [-r [username@]sshserver[:port]] < subnets …>

Опции

  • subnets
    спи­сок под­се­тей марш­рут до кото­рых будет досту­пен через VPN.
    Зна­че­ния 1.2.3.4 - ip-адрес, 1.2.3.4/32 - ip-адрес, 1.2.3.0/24 - сеть с мас­кой 255.255.255.0
    Воз­мож­но ука­зать тун­не­ли­ро­ва­ние опре­де­лен­ных портов:
    1.2.3.4:4000 - тунел­ли­ро­вать­ся будет тра­фик с пор­том назна­че­ния 4000,
    1.2.3.4:4000-6000 - диа­по­зон портов;
    Так же воз­мож­но ука­за­ние домен­но­го име­ни: напри­мер test.un:9000.
  • --method [auto|nat|tproxy|pf]
    Метод фай­ер­во­ла испол­зу­е­мый sshuttle. По-умол­ча­нию auto, пыта­ет­ся сам уга­дать под­хо­дя­щий метод исполь­зо­ва­ния файервола.
  • -l, --listen=[ip:]port
    Исполь­зо­вать ука­зан­ный адрес и порт как про­зрач­ный прок­си. По-умол­ча­нию sshuttle назна­ча­ет порт авто­ма­ти­че­ски и ip-адрес 127.0.0.1.
  • --dns
    Пере­хва­ты­вать локаль­ные DNS запро­сы и пере­на­прав­лять их на уда­лен­ный DNS-сервер.
  • --python
    Для ука­за­ния пути до python интер­при­та­то­ра на уда­лен­ном сер­ве­ре. По-умол­ча­нию это python путь берет­ся из пере­мен­ной PATH.
  • -r, --remote=[username@]sshserver:[port]
    Ука­зы­ва­ет­ся имя поль­зо­ва­те­ля, адрес ssh сер­ве­ра и порт под кото­ры­ми будет про­ис­хо­дить подключение.
    Напри­мер: sshuttle -r root@1.2.3.4:2208.
  • -x --exclude=subnet
    Ука­зы­ва­ем сеть, кото­рая будет исклю­че­на из перенаправления.
    Напри­мер: sshuttle -r root@1.2.3.4:2208 0/0 -x 10.10.10.0/24 - через VPN будет пере­на­прав­лен весь тра­фик, кро­ме тра­фи­ка к сети 10.10.10.0/24
  • -X, --exclude-from=file
    Спи­сок сетей для исклю­че­ния из пере­на­прав­ле­ния берет­ся из ука­зан­но­го фай­ла. НА каж­дую сеть отдель­ная строка.
  • -v, --verbose
    Более инфор­ма­тив­ный вывод инфор­ма­ции о сес­сии. По-умол­ча­нию выво­дят­ся толь­ко ошибки.
  • -D, --daemon
    Авто­ма­ти­че­ский выпол­нять fork для sshuttle после под­клю­че­ния и выпол­нять в background режиме.
  • --syslog
    После под­клю­че­ния отправ­лять все лог-сооб­ще­ния в syslog вме­сто stderr.
  • --pidfile=pidfilename
    Когда исполь­зу­ет­ся опция --daemon, сохра­нять pid sshuttle в ука­зан­ном фай­ле. По-умол­ча­нию это sshuttle.pid файл в теку­щей директории.

Суще­ствую и дру­гие опции с кото­ры­ми мож­но озна­ко­мить­ся в man

При­ме­ры

sudo sshuttle -vr test@1.2.3.4:2208 10.10.0.0/16 -x 10.10.11/0/24

Созда­ем VPN соеди­не­ние с сер­ве­ром с адре­сом 1.2.3.4 по пор­ту 2208 (порт ssh изме­нен­ный) c пра­ва­ми поль­зо­ва­те­ля test на уда­лен­ном сер­ве­ре, орга­ни­зу­ем пере­на­прав­ле­ние через VPN тра­фи­ка обра­щен­но­го к сетям 10.10.0.0.16 за исклю­че­ни­ем под­се­ти 10.10.11.0.24 с выво­дом рас­ши­рен­ной информации.