Подключение к asterisk’у через VPN тунель

Схема работы следующая:

клиент —— (external ip=1.1.1.1) SRV (openvpn ip=10.8.0.1) —- [openvpn tunnel] —— (openvpn ip=10.8.0.6) Asterisk (NO external IP)

То есть, клиент в настройках SIP-аккаунта телефона указывает ip=1.1.1.1 и совершает звонки через сервер астериска, у которого вообще нет внешнего IP («спрятан» в офисе)

Разделим задачу на несколько.

1) Настройка VPN’a.

На сервере SRV поднимаем сервер openvpn, а на asterisk — клиент. Настройка конфигурации может быть любая (шифрование, логины/пароли,…), главное это «привязать» постоянный IP клиенту asterisk’a. Я это делаю через опцию

client-config-dir /etc/openvpn/ccd

в конфиге серверной части и создании файла /etc/openvpn/ccd/asterisk такого содержания:

ifconfig-push 10.8.0.6 10.8.0.5

то есть у клиента asterisk всегда будет IP=10.8.0.6

2) Редирект портов.

Для того, что бы asterisk трафик напраявлял обратно в VPN-канал, а не в дефолтный шлюз, нужно натить внешних клиентов во внутренний IP=10.8.0.1 (это ip серверной части openvpn). Для успешной работы asterisk’a по такой схеме, нам нужно пробросить такие порты:

5060/udp — собственно регистрация
10000-20000/udp — собственно общение (голос).

Порты 10000-20000 берутся из конфига /etc/asterisk/rtp.conf:

rtpstart=10000
rtpend=20000

А теперь правила для проброса:

# iptables -t nat -A PREROUTING -p udp -d 1.1.1.1 -m multiport --dport 5060,10000:20000 -j DNAT --to-destination 10.8.0.6

И не забываем про нат собственно:

# iptables --table nat --append POSTROUTING --out-interface tun0 -j SNAT --to 10.8.0.1

где tun0 — интерфейс openvpn’a

Подключение к asterisk’у через VPN тунель: 12 комментариев

  1. Zub

    iptables —table nat —append POSTROUTING —out-interface tun0 -j SNAT —to 10.8.0.1

    Это прописывается на клиенте?

  2. pa

    как для pf прописывать нат и редирект?
    nat on $ext_if from $vpn to any -> $vpn
    rdr pass on $vpn proto udp from 1.1.1.1 to any port 5060,10000:20000 -> 10.0.8.6

  3. Илья

    Как быть с лучае если схема такая:

    клиент ——ИНТЕРНЕТ— (external ip=1.1.1.1) SRV (openvpn ip=10.10.10.1) —- [openvpn tunnel] —— (openvpn ip=10.10.10.6)GATE(192.168.1.2)—-локальная сеть (192.168.1.2/255.255.255.0) — Asterisk (NO external IP, Internal IP 192.168.1.100).

    Можно сказать что SRV это VPS машина, к которой конектятся клиент GATE за которым локальная подсеть (роуты настроены, у asteriska шлюз в мир=GATE).

    Должен сказать что все работает, просто меняем ip, в данном случае:

    # iptables -t nat -A PREROUTING -p udp -d 1.1.1.1 -m multiport —dport 5060,10000:20000 -j DNAT —to-destination 192.168.1.100

    #iptables —table nat —append POSTROUTING —out-interface tun0 -j SNAT —to 10.10.10.1

    НО в таком варианте если настроить fail2ban, то происходит блокировка (бан) 10.10.10.1.
    Т.о. легальный клиент тоже не может зайти на Asterisk.
    Частично реальный ip атакующего можно взять из VIA: xxxxxxx в заголовке sdp.

    Как решить данную проблему?

    1. skeletor Автор записи

      Непонятно, почему у вас при DNAT происходит подмена source address — такого быть не должно. DNAT подменяет только destination address. В этом случае можете смело ставить fail2ban. Ну а касательно того, атакующий может узнать IP (ну пускай будет знать, что астериск имеет адрес 192.168.1.100) — что дальше? Чем ему это поможет?

      1. Илья

        До внесения строчки
        iptables —table nat —append POSTROUTING —out-interface tun0 -j SNAT —to 10.10.10.1
        вижу все ip верно.
        Вношу строчку вижу только 10.10.10.1 и 192.168.1.100.
        fail2ban блокирует в итоге 10.10.10.1.

          1. Илья

            В правилах iptables только
            iptables -t nat -A PREROUTING -p udp -d 1.1.1.1 -m multiport —dport 5060,10000:20000 -j DNAT —to-destination 192.168.1.100

            iptables —table nat —append POSTROUTING —out-interface tun0 -j SNAT —to 10.10.10.1

            Все остальное пустое (ничего нет).

            Может дело в интерфейсах (приходит на eth0, tun0).

            Почитал вроде как SNAT подменяет адрес (может тут что?).

          2. skeletor Автор записи

            SNAT подменяет source address, но это для исходящего трафика (обратный). У вас же, входящий.

  4. Денис

    Подскажите в чем затык, звонки есть но нет звука с двух сторон.
    Схема такая
    клиент (Zoiper) ——ИНТЕРНЕТ— (external ip=1.1.1.1) SRV (openvpn ip=192.168.3.1) —- [openvpn tunnel] —— (openvpn ip=192.168.3.12 +Asterisk (NO external IP, Internal IP 192.168.0.10, Gate 192.168.0.1)

    На астериске два интерфейса Eth0 и Tap0.
    Got RTP packet from 192.168.0.213:8000 (type 00, seq 012933, ts 11550720, len 000160)
    Sent RTP packet to 10.106.158.141:64544 (type 00, seq 031292, ts 11550720, len 000160)
    Got RTP packet from 192.168.0.213:8000 (type 00, seq 012934, ts 11550880, len 000160)
    Sent RTP packet to 10.106.158.141:64544 (type 00, seq 031293, ts 11550880, len 000160)
    Got RTP packet from 192.168.0.213:8000 (type 00, seq 012935, ts 11551040, len 000160)

    1. skeletor Автор записи

      Скорее всего не проходят RTP пакеты. Возможно они приходят не с того IP, с которого должны. Или блокируются файерволом на каком-то из хостов.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *