Коллеги !
Спасибо вам за ваши советы и предложения как лучше можно сделать в моем случае.
В будущем я обязательно все переделаю в другом виде. Как минимум добавлю второй интерфейс.
А сейчас я хочу разобраться именно в этой, текущей проблеме.Мне кажеться картина совершенно прозрачная. Я уже описывал этот участок сети, попробую еще раз, другими словами и проще:
Есть свич, в него подключен ADSL модем (router mode), linux server (одна сетевуха - 192.168.0.2) и несколько рабочих компов (локальная сеть). Сеть - 192.168.0.0/24
на linux стоит squid+статистика. Squid в прозрачном режиме.
Я хочу чтобы рабочие компы ходили в инет через linux сервер.
для этого на linux включена маршрутизация и добавлены правила iptables:
# vi /etc/iptables.sh
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
# очистка старых правил
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept the traffic on the loopback-interface
iptables -A INPUT -i lo -j ACCEPT
# принимать все пакеты со стороны локальной сети для выбранного IP
iptables -A FORWARD -s 192.168.0.112 -j ACCEPT
# доступ к pop3, smtp и https из локальной сети
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 443 -j ACCEPT
# Закрыть доступ из локальной сети на все остальные порты
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT
# Закрыть доступ из локальной сети для пакетов от сервиса Squid
# HTTP
#iptables -A INPUT -s 192.168.0.0/24 -j REJECT
# пример: полностью закрыть доступ в инет для 192.168.0.117
#iptables -A FORWARD -s 192.168.0.117 -d 0.0.0.0/0 -j REJECT
#iptables -A INPUT -s 192.168.0.117 -j REJECT
# ############### NAT ###############
# Masquerade.
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Or SNAT.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.2
# ###################################
#Redirect HTTP to SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp -d ! 192.168.0.2 --dport 80 -j REDIRECT --to-port 3128
# ###################################
Таким образом я получил на linux NAT + правило для пакетов с портом назначени = 80, которое заворачивает эти пакеты на локальный интерфейс:порт 3128б на котором слушает squid - локальный демон.
Правильно ? Или нет ?
Видимо не совсем правильно все написано, потому что с локальной сети не открывается один сайт по https. Ошибка в таймауте.
!НО! только я убираю вот эту строку:
# Закрыть доступ из локальной сети на все остальные порты
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT
сайт начинает работать ! Следовательно проблема не в том, что в цепочке ДВА NAT-а и не в редиректе на порт 3128 http запросов (это ведь https запрос и он, в случае, когда squid работает в прозрачном (transparent)режиме, проходит через NAT, а не через squid)
Проблема в чем то другом... наверно когда я убираю эту строку - я открываю полный доступ через NAT для всей сети, и при этом какие-то "пакетики" от компа на котором открывается неработающий https сайт пропускаются в инет и все работает.
но я НЕ хочу, чтобы у локальных компов был ПОЛНЫЙ доступ к инету через этот NAT.
поэтому я снова добавляю строку
# Закрыть доступ из локальной сети на все остальные порты
# ping
iptables -A FORWARD -s 192.168.0.0/24 -j REJECT
и пытаюсь открыть ПОЛНЫЙ доступ только для отдельного IP-адреса, скажем 192.168.0.112
# принимать все пакеты со стороны локальной сети для выбранного IP
iptables -A FORWARD -s 192.168.0.112 -j ACCEPT
казалось бы - все логично. для одного открыл, для всех - закрыл.
Но.. сайт снова не работает. хотя с этого компа можно пинговать внешние ресурсы..
Вот я и не пойму в чем дело.