Конфликт сетей в iptables
Есть интернет-шлюз с debian 8.3, у него 3 сетевые карты + openvpn туннель, итого eth0 - основная локалка, маска 11.0.0.0/24, dhcp (да, такая сеть, спецом думал, что не с кем не пересекусь, НО...) eth1 - wan, статика eth2 - резерв (планировался под резервный wan) tun0 - туннель до одного сервиса института так же стоит squid
Все настроено и в целом работает как задумано. Но потребовалось создать еще одну сеть, в конкретном частном случае одному компьютеру нужен сетевой адрес, отличный от 11.0.0.* (маски совпали с одним сервисом, ять! раз в год и палка стреляет...)
Решил задействовать eth2, и задал маску 172.20.77.0/24 Добавил в iptables... Проблема:
У всех клиентов 11.0.0.* есть пинг до внешнего ресурса по ip или имени хоста, открываются сайты через браузер (80/443, работают через прокси)
Завожу одного клиента с ip 172.20.77.2, у него есть пинг, у него открываются сайты (мимо прокси). В это время отваливается доступ к сайтам у 11.0.0.*, причем пинг по ip и имени сайта есть. Понимаю, что отваливается 80/443 порт, но сквид не падает, в логах не заметил ничего (бегло смотрел).
Проблема воспроизводится, т.е. пока нет клиента в сети 172.20.77.0/24, все работает
Привожу настройки
/etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# WAN1
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 188.111.111.111
netmask 255.255.255.0
gateway 188.111.111.254
# LAN
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 11.0.0.1
netmask 255.255.255.0
# LAN2
auto eth2
allow-hotplug eth2
iface eth2 inet static
address 172.20.77.1
netmask 255.255.255.0
# iptables restore
post-up iptables-restore < /etc/iptables.rules
Генерируем iptables
#!/bin/bash
# LAN interface
IF0="eth0"
# WAN interface 1
IF1="eth1"
# WAN interface 2
IF2="tun0"
# LAN2 int
#IF3="eth2"
# IP WAN interface 1
IP1="188.111.111.111"
# IP WAN interface 2
IP2="212.193.47.67"
# gateway 1
P1="188.111.111.254"
# gateway 2
P2="212.193.47.65"
# LAN netmask
P0_NET="11.0.0.0/24"
# LAN VIPnet netmask
P3_NET="172.20.77.0/24"
# WAN1 netmask
P1_NET="188.111.111.0/24"
# WAN2 netmask
P2_NET="212.193.47.0/24"
####################
# Очищаем правила
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Запрещаем все, что не разрешено
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Разрешаем localhost и локалку
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $IF0 -j ACCEPT
iptables -A INPUT -i $IF3 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o $IF0 -j ACCEPT
iptables -A OUTPUT -o $IF3 -j ACCEPT
# Рзрешаем пинги
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Разрешаем все исходящие подключения сервера
iptables -A OUTPUT -o $IF1 -j ACCEPT
# Разрешаем все входящие подключения сервера
#iptables -A INPUT -i $IF1 -j ACCEPT
# Разрешаем установленные подключения
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Отбрасываем неопознанные пакеты
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
# Отбрасываем нулевые пакеты
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Закрываемся от syn-flood атак
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# Разрешаем доступ из локалки наружу
iptables -A FORWARD -i $IF0 -o $IF1 -j ACCEPT
iptables -A FORWARD -i $IF3 -o $IF1 -j ACCEPT
# Закрываем доступ снаружи в локалку
iptables -A FORWARD -i $IF1 -o $IF0 -j REJECT
iptables -A FORWARD -i $IF1 -o $IF3 -j REJECT
# Перенаправляем трафик LAN/TUN0
iptables -A FORWARD -p all -i $IF0 -o $IF2 -j ACCEPT
iptables -A FORWARD -p all -o $IF0 -i $IF2 -j ACCEPT
# Резрешим доступ в TUN0
iptables -A OUTPUT -p all -o $IF2 -j ACCEPT
# Переадресация 80 и 443 портов на прозрачный сквид
iptables -t nat -A PREROUTING -p tcp -m tcp -s 11.0.0.0/24 --dport 443 -j REDIRECT --to-ports 3443
iptables -t nat -A PREROUTING -p tcp -m tcp -s 11.0.0.0/24 --dport 80 -j REDIRECT --to-ports 3080
# Включаем NAT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
iptables -t nat -A POSTROUTING -s $P3_NET -o $IF1 -j MASQUERADE
# Открываем доступ к SSH (порт 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Сохраняем правила
/sbin/iptables-save > /etc/iptables.rules