среда, 13 февраля 2013 г.

Настройка туннеля в Linux Ubuntu

Для настройки сети необходимо добавить в файл /etc/network/interfaces следующие строки:
auto tun1
iface tun1 inet static
    # Адрес машины внутри туннелся. Соединения точка-точка, по этому маска из одних единиц
    address 192.168.0.1
    netmask 255.255.255.255
    # Адрес внутренний адрес машины, с которой установлен тунель
    pointopoint 192.168.0.2
    # Размер MTU
    mtu 1480
    # Перед поднятием интерфейса нужно создать тунель, что мы тут и делаем
    pre-up iptunnel add tun1 mode ipip local 89.123.1.234 remote 89.123.2.234 ttl 255
    up ifconfig tun1 multicast
    # Весь трафик в соседнюю сеть надо завернуть в тунель
    up route add -net 192.168.2.0/24 gw 192.168.0.2 dev tun1
    # Удаляем туннель после удаления интерфейса
    post-down iptunnel del tun1
В примере используется имя интерфейса tun1, но, в принципе, его можно назвать как угодно.
Размер MTU может быть различным. Для его вычисления надо взять минимальный MTU от интерфейсов, смотрящих в интернет (это можно сделать командой ifconfig), и вычесть из него заголовок пакета ipip, которые равен 20 байтам.
Основная борьба под Linux начитается с фаерволом. У меня она свелась к добавлению следующих правил в файл /var/lib/ufw/user.rules (но это сильно зависит от конкретного случая):
-A ufw-user-input   -p ipencap -i ppp0 -j ACCEPT
-A ufw-user-input   -i tun1 -j ACCEPT
-A ufw-user-forward -i tun1 -j ACCEPT
Для того, чтобы предыдущие изменения вступили в силу, необходимо выполнить команды:
sudo ifup tun1
sudo /etc/init.d/ufw restart
Для диагностики могу посоветовать следующий порядок действий:
  1. Проверить наличие туннеля:
    ~$ ip tunnel show
    tunl0: ip/ip  remote any  local any  ttl inherit  nopmtudisc
    tun1: ip/ip  remote 83.123.1.234  local 83.123.2.234  ttl 255
  2. Проверить, поднялся ли интерфейс:
    ~$ ifconfig tun1
    tun1      Link encap:IPIP Tunnel  HWaddr
     inet addr:192.168.0.1  P-t-P:192.168.0.2  Mask:255.255.255.255
     UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1480  Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:81 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:0
     RX bytes:0 (0.0 B)  TX bytes:6478 (6.4 KB)
    Здесь надо отметить, что кол-во RX-пакетов должно расти при пинговании той стороны даже в том случае, если маршрутизатор на той стороне выключен.
    То есть если идет попытка пинговать адрес 192.168.0.2 или 192.168.2.100, то RX должен увеличиваться. В противном случае надо искать проблему в фаерволе.
  3. Проверить, проходят ли пакеты через нужные правила iptables.
    Для этого можно воспользоваться ключем -v. Он показывает сколько пакетов и байт прошло через указанное правило.
  4. Проверить, уходят ли пакеты во внешний интерфейс:
    sudo ~$ tcpdump -i ppp0 -n proto ipencap

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

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