Назад | Перейти на главную страницу

правила iptables, разрешающие L2TP / IPSEC VPN за межсетевым экраном

Я спрашивал об этом на форумах Smoothwall Express, но они, по понятным причинам, не хотят оказывать большой помощи. Ведь они действительно хотят продавать коммерческую версию.

Мне нужно предоставить L2TP / IPSEC VPN для удаленной поддержки некоторого нового оборудования, которое мы получим в ближайшее время (без выбора этой части). Поскольку удаленный пользователь также должен пройти аутентификацию в Active Directory, мне нужно запустить VPN на нашем сервере Windows (2003), а не непосредственно на брандмауэре.

Поскольку Smoothwall Express не поддерживает протоколы пересылки из обычного интерфейса управления, это необходимо сделать, отредактировав настройки iptables в rc.firewall.up. В этом моя проблема. Я не знаю iptables и считаю, что даже если я найду время, чтобы прочитать об этом, риски того, что я облажусь, будут значительными.

Следующий раздел в настоящее время существует в rc.firewall.up:

# IPSEC
/sbin/iptables -N secin
/sbin/iptables -A secin -i ipsec0 -j ACCEPT
/sbin/iptables -A INPUT -j secin

/sbin/iptables -N secout
/sbin/iptables -A secout -i ipsec0 -j ACCEPT
/sbin/iptables -A FORWARD -j secout

[здесь кое-что не связанное]

# IPSEC
/sbin/iptables -N ipsec
/sbin/iptables -A ipsec -p udp --destination-port 500 -j ACCEPT
/sbin/iptables -A ipsec -p udp --destination-port 4500 -j ACCEPT
/sbin/iptables -A ipsec -p 50 -j ACCEPT
/sbin/iptables -A ipsec -p 51 -j ACCEPT
/sbin/iptables -A block -i ppp0 -j ipsec
/sbin/iptables -A block -i ippp0 -j ipsec
if [ "$RED_DEV" != "" ]; then
    /sbin/iptables -A block -i $RED_DEV -j ipsec
fi

Если я не ошибаюсь, второй блок приведет к тому, что трафик, который я хочу переадресовать, будет поглощен. Я попытался закомментировать этот второй блок и добавить этот, который адаптирован из строк, необходимых для сквозной передачи PPTP (что действительно работает), и того, что мне удалось получить из различных источников:

# L2TP/IPSEC
/sbin/iptables -N l2tp
/sbin/iptables -A l2tp -p udp --destination-port 500 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p udp --destination-port 1701 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p udp --destination-port 4500 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p 50 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -A l2tp -p 51 --dst 192.169.0.7 -j ACCEPT
/sbin/iptables -I FORWARD -j l2tp
/sbin/iptables -t nat -N l2tp
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 500 -j DNAT --to 192.169.0.7:500
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 1701 -j DNAT --to 192.169.0.7:1701
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p tcp --dport 4500 -j DNAT --to 192.169.0.7:4500
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p 50 -j DNAT --to 192.169.0.7
/sbin/iptables -t nat -A l2tp -i $RED_DEV -p 51 -j DNAT --to 192.169.0.7
/sbin/iptables -t nat -A PREROUTING -j l2tp

.. но это не работает. Где я набросился?

Кстати, $RED_DEV переводится в общедоступный интерфейс и, очевидно, 192.168.0.7 это мой VPN-сервер.

Обновить:

Оказывается, вышеперечисленные настройки работают - вроде как. Я тестирую это дома, где у меня есть MacBook и несколько машин с Windows XP. Я прекрасно могу подключиться с Mac, но не могу подключиться ни на одной из машин Windows. К сожалению, машиностроительная компания, которой требуется этот VPN для удаленной поддержки, использует только Windows XP. :(

Как отмечено в обновлении вопроса, даже с двойным NAT VPN работает с Mac на Windows, но не с Windows на Windows. Похоже, что на самом деле нужно только придумать правильный поисковый запрос, чтобы найти решение.

Согласно эта статья в базе знаний, на клиентской машине Windows XP нам нужно создать новый DWORD названное значение AssumeUDPEncapsulationContextOnSendRule в HKLM\System\CurrentControlSet\Services\IPSec. Для двойного NAT необходимо значение 2.

Теперь мне нужно найти решение для Windows 7, потому что рано или поздно мне придется с этим разобраться.

Обновить

Для удобства всех, у кого есть такая же проблема, исправление для Windows 7 заключается в создании нового DWORD названное значение AssumeUDPEncapsulationContextOnSendRule в HKLM\SYSTEM\CurrentControlSet\services\PolicyAgent. Опять же, для двойного NAT требуется значение 2.

Вот руководство, чтобы убедиться, что клиентские порты открыты на самой машине Windows.

https://www.magnumvpn.com/setup-windows-10-firewall-l2tp.html