среда, 12 февраля 2014 г.

Если не работает VPN через роутер

Убил кучу времени на решение проблемы, так что опишу решение здесь.

Итак, картина маслом по хлебу: при смене провайдера перестал работать VPN (securityKISS, kebrum) в Ubuntu. Соединения настроены через Network Manager. Однако, обнаружилось, что если подключить кабель к ноутбуку напрямую, а не через роутер, то всё работает.

Схема такая: Интернет → Провайдер → PPPoE → Роутер (Zyxel Keenetic Lite) → Компьютеры с Ubuntu (12.04.4 64 бита).

До этого провайдер не использовал PPPoE и всё работало.

Итак, тут есть сразу две проблемы. Во-первых, нужно проверить, включен ли проброс пакетов в ядре:
cat /proc/sys/net/ipv4/ip_forward
Ответом должно быть "1". Если ответ "0", то нужно включить проброс пакетов на постоянной основе (будет действовать после перезагрузки):
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
Но перезагружаться не обязательно, можно включить проброс пакетов в текущей сессии:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Но это только полбеды. Если у вас заработал VPN - поздравляю. Если нет - читаем дальше. Проблема тут в том, что провайдер использует PPPoE. А это значит, MTU (максимальный размер пакета) уменьшается. Роутер его тоже уменьшит. Проверяем:
$ traceroute --mtu 8.8.8.8
Ответом будет что-то вроде:
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 65000 byte packets
1  192.168.1.1 (192.168.1.1)  0.868 ms F=1400  0.740 ms  0.669 ms
2  x.x.x.x (x.x.x.x)  1.722 ms  1.684 ms  1.582 ms
Вот там есть F=1400 это и есть наш MTU. Заходим в свойства соединения с роутером в Network Manager и меняем MTU на это число.

Собственно, всё, после этого VPN должен работать.