Поиск по этому блогу

пятница, 3 февраля 2012 г.

Решение проблемы VPN Internet sharing на Lion

Решение проблемы VPN Internet sharing на Lion
Я тут недавно спрашивал не появилось ли решения проблемы шаринга впн-соединения на Льве.
Оказалось, что никто не знает (раз так и не рассказали).
Пришлось заняться темой самому. В моих камментах к своему же посту и переписке с [info]tsybulin описаны некоторые мои мытарства в поисках правильного пути.



Симптомы: соединение шарится, но сайтов открываются единицы, аська не коннектится и т.д.
При ближайшем рассмотрении оказывается типичным MTU Black Hole. Path MTU Discovery не работает. Проверить это можно несколькими способами: элементарно поставить MTU поменьше на airport-интерфейсе компьютера-клиента - всё чудесным образом начинает работать. Однако установка MTU не проканает для ифонов/ипадов без джейла, да и всем гостям говорить, чтобы уменьшили MTU - не кузяво.

Обычными методами систем до 10.7 настроить нормально не выйдет, ибо во Льве apple перешла на natpmpd и pf вместо обычных natd и ipfw. natpmpd в отличие от старого доброго демона natd обладает практически минимальным количеством настроек, а вот pf - довольно гибок. Он нам и поможет.

Главный процесс PF - это pfctl. Плюс есть конфиг-файл /etc/pf.conf. Можно почитать по ним маны =)
Но вернёмся к нашей задаче - устранению MTU Black Hole на компьютере-роутере. Простейший и очевидный путь - залочить MSS. В этом нам поможет раздел Traffic Normalization мана по pf.conf, а конкретнее - директива scrub.

В /etc/pf.conf перед дефолтным объявлением apple anchors (ибо структура конфига не произвольная, а жёсткая - pfctl ругаться будет, если не соблюдён порядок "секций " - для этого и надо читать маны) в первом приближении можно написать (естественно, все действия под root #39;ом):

scrub in all max-mss ваш_mss no-df
scrub out all max-mss ваш_mss no-df

первая строка для входящих (in) пакетов на всех интерфейсах (all)
вторая строка для исходящих (out) пакетов на всех интерфейсах (all)
no-df снимает флаг "не фрагментировать " с пакетов
max-mss устанавливает максимальный mss. каков ваш? одному вашему прову известно, так что придётся поковырять и высчитать самому. mss будет в пределах 1200..1460 я надеюсь.

конфиг надо сохранить, конечно.
если pfctl не запущен (а он вроде как запускается по умолчанию) запускаем его:

pfctl -e

и подгрузим наш файл:

pfctl -f /etc/pf.conf

в принципе при корректном значении mss всё должно заработать.

далее можно конфиг оттюнить. моей конфигурации оказалось достаточно нормализации только входящих пакетов и лишь на одном интерфейсе (ибо только на нём и происходит NAT):

scrub in on en0 max-mss 1420 no-df


на маках обычно интерфейсы такие (на Pro не знаю - там вроде 2 ethernet порта):
en0 - встроеный ethernet
en1 - airport

при переподключении впн настройка сохраняется, при перезагрузке - тоже.

усё =)


добавлю про размер MTU/MSS.
обычно MSS = MTU - 40
Билайн пишет у себя про MTU=1460. Поэтому у меня и начало работать с MSS = 1420. Хотя на той же странице и про MSS они пишут 1460. Кроме того, если посмотреть вывод ifconfig ppp0, то MTU у меня устанавливается вообще 1280 на vpn-интерфейсе. Так что имеет смысл начать со значения из ifconfig ppp0 минус 40 - хуже не будет.

Комментариев нет:

Отправить комментарий