Пускаем внешний траффик мимо VPN

Written by elwood

Из-за медленного VPN на работе озаботились настройкой маршрутизации. Нужно было настроить так, чтобы весь трафик, кроме того, для которого реально требовался VPN, шел обычным образом – через шлюз по умолчанию. В результате нашли путь, который нам нужен:

1. В свойствах адаптера VPN-соединения зайти в IPv4 -> Advanced и снять галочку “Use default gateway on remote network”, в IPv6 тоже. После снятия галочки весь траффик, который раньше шел через VPN – будет идти так, как было без него. После этого нам будет нужно явно добавить маршрут (маршруты), для которых VPN необходим.
vpn-1
2. Определить адрес шлюза VPN-соединения – открыть статус адаптера на вкладке Details. В нашем случае это адрес 172.19.71.70
vpn-2
3. Определить номер интерфейса VPN-соединения командой route print. В нашем случае это номер 42.
vpn-3
4. Определить, какая подсеть (или отдельные адреса) нуждается в том, чтобы быть маршрутизируемой через VPN. Для этого уже не получится просто подсмотреть куда-нибудь, нужно знать, к каким IP-адресам вы подключаетесь. Либо задайте сами (если вы знаете), либо спросите у знающего коллеги. В моём случае это адреса 192.168.*.*, поэтому маска будет 255.255.0.0
5. Записать команду

route -p add 192.168.0.0 mask 255.255.0.0 172.19.71.70 if 42

Параметр -p означает, что добавляемый маршрут будет сохранён (persistent). Параметр if 42 означает, что этот маршрут будет применяться только при поднятом интерфейсе 42 (то бишь при подключенном VPN). Если не указывать if, то маршрут будет работать только до дисконнекта VPN. При дисконнекте Windows увидит, что маршрут неприменим, и уберёт его. И даже после переподключения, несмотря на то, что маршрут создан с параметром -p, он не активизируется. Придётся его удалять и добавлять снова вручную – и так при каждом переподключении. А если указать if, то при отключении от VPN система поймёт, что маршрут не нужно убирать, а нужно только деактивировать его до повторного поднятия интерфейса.

6. Переподключиться к VPN

7. Проверить маршрутизацию до публичных серверов (yandex.ru, например) и до внутренних компьютеров, доступных только в контексте VPN.

tracert yandex.ru
tracert 192.168.1.4

Первый маршрут должен идти так же, как и при отключенном VPN. Второй – через шлюз VPN-подключения.

QuickStart для Wireshark

Written by elwood

wireshark-logo

Меня всегда пугал этот инструмент. Пугал тем, что я НИЧЕГО не понимал в том, что он выводит. Я не понимал, как настраивать фильтры, не понимал, что вообще происходит и как это использовать. Мешал высокий порог вхождения. Когда-то такими же сложными для меня были Eclipse, IntelliJ IDEA, mercurial, maven ну и так далее. И чтобы преодолеть этот порог, обычно нужен хороший QuickStart – пятиминутный гайд, как включиться в работу. Без него всё идёт туго и невесело. Вот такой гайд я и хочу предложить.

Итак, задача наша такая – посмотреть TCP-пакеты, идущие “на” или “с” заданного IP-адреса.

1. Включаем wireshark, выбираем сетевой интерфейс, который будем мониторить. Можно выбрать несколько интерфейсов. Выбираем тот, который используется для нашего сетевого взаимодействия. То есть например у вас программа обращается к серверу, который расположен в интернете, и несколько интерфейсов: один Ethernet, подключенный к интернету, другой – Wi-Fi для взаимодействия в рамках вашей локальной сети. Нас в этой ситуации будет интересовать Ethernet-адаптер. Его и выбираем. Нажимаем Start.

2. Пошли пакетики, их очень много, и нам нужно задать правила для фильтрации. Так как нас интересует TCP протокол, то мы можем использовать например следующее правило:

tcp && (tcp.srcport == 80 || tcp.dstport == 80)

Первое условие отфильтровывает tcp-пакеты, второе – применяет дополнительные правила для порта.

Если нужно наложить условие на IP адреса, то это можно сделать так: ip.src_host == 87.31.220.35

3. Всё работает ! Достраивать правила для фильтрации несложно, поскольку есть автодополнение.

4. Если вы хотите перехватывать loopback-траффик (который идет через localhost), то тут, к сожалению, есть проблема. Дело в том, что этот траффик не доходит до сетевых адаптеров, и WireShark не в состоянии его перехватить. http://stackoverflow.com/questions/5847168/wireshark-localhost-traffic-capture Вот тут есть 2 решения этой проблемы: в первом случае предлагается установить Microsoft Loopback Adapter и натравить на него WireShark, во втором случае предлагается пошаманить с маршрутизацией. Судя по отзывам, оба способа работают, так что всё ок 🙂

NBox 1.0 released

Written by elwood

Untitled

Собрался с силами и зарелизил свою давно написанную утилиту для запаковки бинарников в один исполняемый файл. Попутно проверил работоспособность основных кейсов, добавил пару примеров (в том числе пример с нативной DLL, проигрывающей XM файл). А то проект вроде рабочий, но воспринимается как мертвый из-за последнего релиза 3 года назад.