NAT и несколько VPN - соединений: помогите решить проблему

Аватар пользователя Kitten

Поднят сервер на ASPLinux 10. В нем две сетевые карты. Одна смотрит в локальную сеть 192.168.0.0/24, другая во внешнюю 10.0.4.68/255.255.255.252 Провайдер дает Инет по VPN. Естественно, на сервере поднят NAT, разрешен в IPTables порт 1723 и протокол GRE. Пока учетная запись была одна - проблем не было. Но решили разделить отделы и посадить каждый на свою учетку. Первый канал поднимается без проблем, но как только пытаешься поднять второй канал, доходит дело только до авторизации (висит сообщение "Поверка имени пользователя и пароля") и рвется первое соединение. Дальше дело не идет. Попробовал обновить IPTables до версии 1.3.3. Стало чуть лучше (предыдушее соединение перестало обрываться), но второе так и не авторизуется. Если на сервере остановить IPTables, а потом стартовать заново через какое-то короткое время, то иногда удается поднять и второе соединение. Чую, что проблема в IPTables, но не пойму где. Или нереально поднять больше одного VPN в таких условия или я чего-то упускаю. Рабочие станиции на Windows XP professional. Вот скрипт для настройки IPTables:
#!/bin/bash
#******************************************************
# Предопределения
#******************************************************
# Для инета
# Сетевой инет-интерфейс
INET_IFACE="eth1"
INET_IP="10.0.4.70"

# Для локальной стороны
# Сетевой интерфейс, свзязанный с локалкой
LAN_IFACE="eth0"
# IP-адрес "локального" сетевого интерфеса
LAN_IP="192.168.0.1"
# Диапазон ip-адресов локальной подсети
LAN_IP_RANGE="192.168.0.0/24"

# Для внутренних дел (интерфейс обратной петли)
# Название
LO_IFACE="lo"
# IP-адрес
LO_IP="127.0.0.1"

# Ускоренное обращение к утилитам
IPTABLES="/sbin/iptables"
DEPMOD="/sbin/depmod"
MODPROBE="/sbin/modprobe"

#******************************************************
# Загрузка модулей, отвечающих за работу фильтрации
#******************************************************
$DEPMOD -a
$MODPROBE ip_tables
$MODPROBE iptable_nat
$MODPROBE iptable_filter
$MODPROBE ipt_state
$MODPROBE ip_gre

#******************************************************
# Работаем с таблицей filter
#******************************************************
# Определение политик по умолчанию
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP

#ICMP
$IPTABLES -N icmp-packets
$IPTABLES -A icmp-packets -p ICMP --icmp-type 3 -j ACCEPT
$IPTABLES -A icmp-packets -p ICMP --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp-packets -p ICMP --icmp-type 11 -j ACCEPT
$IPTABLES -A icmp-packets -p ICMP --icmp-type 12 -j ACCEPT
$IPTABLES -A icmp-packets -p ICMP -j DROP

$IPTABLES -A INPUT -p ICMP -j icmp-packets
$IPTABLES -A FORWARD -p ICMP -j icmp-packets

#Подключаем 22 порт для SSH, 137, 138,139 для SAMBA, 1723 для VPN
$IPTABLES -N tcp_packets
$IPTABLES -A tcp_packets -p TCP -i $LAN_IFACE --dport 22 -j ACCEPT
$IPTABLES -A tcp_packets -p TCP -i $LAN_IFACE --dport 1723 -j ACCEPT
$IPTABLES -A tcp_packets -p TCP -i $LAN_IFACE --dport 137 -j ACCEPT
$IPTABLES -A tcp_packets -p TCP -i $LAN_IFACE --dport 138 -j ACCEPT
$IPTABLES -A tcp_packets -p TCP -i $LAN_IFACE --dport 139 -j ACCEPT
$IPTABLES -A tcp_packets -p TCP -j DROP

#Подключаем порт 137, 138,139 для SAMBA udp
$IPTABLES -N udp_packets
$IPTABLES -A udp_packets -p UDP -i $LAN_IFACE --dport 137 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -i $LAN_IFACE --dport 138 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -i $LAN_IFACE --dport 139 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -j DROP

#LO
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

#bad_packets
$IPTABLES -N bad_packets
$IPTABLES -A bad_packets -p TCP --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP

#allowed
$IPTABLES -N allowed
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -j DROP

$IPTABLES -A INPUT -p UDP -i $LAN_IFACE -s $LAN_IP_RANGE -j udp_packets
$IPTABLES -A INPUT -p TCP -i $LAN_IFACE -s $LAN_IP_RANGE -j tcp_packets
$IPTABLES -A INPUT -p TCP -j bad_packets
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j DROP

#Обеспечим минимальный уровень безопасности
$IPTABLES -A FORWARD -m state --state NEW -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -o $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -o $INET_IFACE -j ACCEPT

#VPN
$IPTABLES -A FORWARD -p GRE -j ACCEPT

#******************************************************
# Работаем с таблицей nat
#******************************************************

#******************************************************
# Таблица nat - стандартная цепочка POSTROUTING
#******************************************************
# Включаем пересылку и маскирование (маскарад) адресов локальной сети
#$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -s $LAN_IP_RANGE -j SNAT --to-source $INET_IP

Аватар пользователя sergeil

Re: NAT и несколько VPN - соединений: помогите решить пробле

Если у Вас подозрения на IPTables, то предлагаю

$IPTABLES -A INPUT   -m state --state NEW    -j LOG --log-level info --log-prefix "DEF_INP_UNK:"
$IPTABLES -A OUTPUT -m state --state NEW -j LOG --log-level info --log-prefix "DEF_OUT_UNK:"
$IPTABLES -A FORWARD -m state --state NEW -j LOG --log-level info --log-prefix "DEF_FWD_UNK:"

поставить завершающими строки Вашего скрипта.

Это позволит Вам проконтролировать какие пакеты были обработаны правилами по умолчанию.
Для Вашего случае, отброшено в цепочках INPUT/FORWARD и пропущено в OUTPUT.
Осторожно!!! Фиксируется каждый пакет. Это может привести к тому, что /var/log/messages будет раси очень быстро и может переполнить раздел /var

2/ Исходя из того, что Вы используете два PPTP подключения, логично предположить что у Вас multi-home конфигурация. То есть, конфигурация с двумя проайдерами. В такой конфигурации существует два шлюза по умолчанию... Вас это не смущает?

Аватар пользователя Kitten

Re: NAT и несколько VPN - соединений: помогите решить пробле

Провайдер один, но два подключения. Поэтому и шлюз по умолчанию тоже один. У меня есть такое подозрение, что в IPTables есть какой-то счетчик или флаг, который фиксирует соединение и не дает поднять второе. Вот листинг tcpdump при неподключении:
14:12:42.824648 IP 192.168.0.3.2678 > 10.0.0.65.1723: tcp 0
14:12:42.862682 IP 10.0.0.65.1723 > 192.168.0.3.2678: tcp 0
14:12:42.863100 IP 192.168.0.3.2678 > 10.0.0.65.1723: tcp 156
14:12:42.902813 IP 10.0.0.65.1723 > 192.168.0.3.2678: tcp 156
14:12:42.903291 IP 192.168.0.3.2678 > 10.0.0.65.1723: tcp 168
14:12:42.942699 IP 10.0.0.65.1723 > 192.168.0.3.2678: tcp 32
14:12:43.085820 IP 192.168.0.3.2678 > 10.0.0.65.1723: tcp 0
14:12:43.141799 IP 192.168.0.3.2678 > 10.0.0.65.1723: tcp 24
14:12:43.262704 IP 10.0.0.65.1723 > 192.168.0.3.2678: tcp 0
14:12:43.480613 IP 192.168.0.3 > 10.0.0.65: call 63872 seq 0 gre-ppp-payload
14:12:45.486130 IP 192.168.0.3 > 10.0.0.65: call 63872 seq 1 gre-ppp-payload
14:12:48.518619 IP 192.168.0.3 > 10.0.0.65: call 63872 seq 2 gre-ppp-payload
14:12:52.524253 IP 192.168.0.3 > 10.0.0.65: call 63872 seq 3 gre-ppp-payload
14:12:56.529409 IP 192.168.0.3 > 10.0.0.65: call 63872 seq 4 gre-ppp-payload
14:12:59.224865 IP 10.0.0.65.1723 > 192.168.0.3.2678: tcp 0
14:12:59.229238 IP 192.168.0.3.2678 > 10.0.0.65.1723: tcp 0
14:12:59.264832 IP 10.0.0.65.1723 > 192.168.0.3.2678: tcp 0

А при нормальном подключении за строкой

14:12:56.529409 IP 192.168.0.3 > 10.0.0.65: call 63872 seq 4 gre-ppp-payload

следует строка

14:12:56.529409 IP 10.0.0.65 > 192.168.0.3: call 63872 seq 4 gre-ppp-payload (не обращайте внимаение на временную метку)
т.е. VPN сервер не получает пакета gre-ppp-payload от 192.168.0.3 и на этом обмен пакетами останавливается.
Т.е. в чем проблема вроде бы видно, но как еще разрешиить?

Аватар пользователя sergeil

Re: NAT и несколько VPN - соединений: помогите решить пробле

Kitten писал(а):
ровайдер один, но два подключения. Поэтому и шлюз по умолчанию тоже один. У меня есть такое подозрение, что в IPTables есть какой-то счетчик или флаг, который фиксирует соединение и не дает поднять второе.

1. На время остановите iptables. Смогут ли стартоваать оба соединения?
2. Маршрутизация должна быть настроена на оба соединения одновременно. Это нетипичнная конфигурация, требующая изощренной настройки. У меня два провайдера...

[sergeil@app sergeil]$ ip route show

...
default equalize
nexthop via 195.xx.xx.xxx dev eth2 weight 1
nexthop via 62.xxx.xxx.xx dev eth1 weight 1

Возможно, Вам будет проще настрить свою собственную систему учета...

RSS-материал