Категорії
Linux PBX (telephony)

Подключение к 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

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

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

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

как для 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

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

клиент ——ИНТЕРНЕТ— (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.

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

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

До внесения строчки
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.

В правилах 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 подменяет адрес (может тут что?).

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

Подскажите в чем затык, звонки есть но нет звука с двух сторон.
Схема такая
клиент (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)

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

Залишити коментар до skeletor Скасувати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff