Автор Тема: [РЕШЕНО] Странная работа NAT, Дистр: Школьный 5.0.1 ("из коробки")  (Прочитано 5515 раз)

Оффлайн flint1975

  • Участник
  • *
  • Сообщений: 1 443
Школьный сервер 5.1 - настроен в "тупую" из коробки, используется как роутер и немного как хранилище файлов.
 Одна сетевая карта, она смотрит в сеть, и она же подключается по PPPOE. Сетевое подключение PPPOE - внешнее, остальные внутренние. Vpn не используется. Настроен прокси без ограничений, не прозрачный.
Собственно проблема следующая: Речь идет только об HTTP и HTTPS, при использовании проки - все хорошо. если на клиенте не настраивать прокси сервер - то работает нестабильно, и не до всех сайтов. Выглядит так, как будто ответ от внешнего сервера потерялся, а браузер ждет и ждет. Иногда повторная попытка открыть сайт приводит к успеху, иногда только после перезагрузки сервера все работает нормально. Реконнект PPPOE ничего не меняет. В логе ничего подозрительного не замечено.
Замечено, что после отключения сбора статистики сетевых подключений, частота проявления ошибок уменьшилась в 2 раза, но это субъективно.
Железо: P4 2.66 Hyper-Trading, 1024MB RAM, Video - Intel (integrated), HDD - 80GB
Аналогичные траблы и на другой машине, но там не критично, поскольку прямой доступ не требуется, все довольны прокси.
« Последнее редактирование: 05.08.2010 06:36:39 от flint1975 »

Оффлайн Alukardd

  • Участник
  • *
  • Сообщений: 197
Здравсвуйте, flint1975.
Лично мне хотелось бы взглянуть на правила iptables...

з.ы. а вообще так очень не рекомендуется -- вешать внутренне и внешнее соединение на 1 физическую планку... 2 внутренне сетки-то вешать вместе не очень хорошо, а у вас...
Debian Lenny 6.0, Ubuntu 10.04 Lucid Lynx

Оффлайн flint1975

  • Участник
  • *
  • Сообщений: 1 443
Про две планки - согласен, но только с точки зрения безопасности, однако там где это стоит - не критично, свичи провайдера "прошиты" только на pppoe, а ключ от каморки - только у меня! :).

Сегодня весь день ковырялся с двумя серваками, настроенными идентично, за исключением, планок. В одном две, в другом одна. Так вот, в том, который с двумя я этот трабл победить не смог. А в том где одна - вроде пока работает все.
Мои действия:
1. Я заметил, что там если произошло разъединение pppoe - то в половине случаев наблюдается такой эффект: в браузере, без использования прокси - яндекс открывается а большинство сайтов - mail.ru altlinux.ru - нет (ожидают ответа сервера). Помогает только перезагрузка.
З.Ы. на обоих серваках пппое - с выделенным IP.
2. ftp соединения работают в любом режиме
3. pop3 - не работает вообще до внешних серверов, однако тут есть один момент - соединение проходит, но потом наступает процесс получения списка писем и абзац, вышибает по таймауту. (почтовый сервер, который на самом серваке работает и доступен с любой стороны без нареканий)
4. При попытке включить прозрачный прокси - ничего не меняется. Если в браузере прямо указано работать через прокси - все хорошо, если без прокси - эффект идентичен вышеуказанному.

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

iptables - сейчас попробую!

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  -f  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:webcache
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp-data
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ftp-data
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ftp
ACCEPT     udp  --  anywhere             anywhere            udp dpt:openvpn
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:openvpn
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3
ACCEPT     udp  --  anywhere             anywhere            udp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3s
ACCEPT     udp  --  anywhere             anywhere            udp dpt:pop3s
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp
ACCEPT     udp  --  anywhere             anywhere            udp dpt:smtp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:urd
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:submission
ACCEPT     udp  --  anywhere             anywhere            udp dpt:submission
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http
ACCEPT     udp  --  anywhere             anywhere            udp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
ACCEPT     udp  --  anywhere             anywhere            udp dpt:https
ACCEPT     icmp --  anywhere             anywhere
DROP       all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DROP       all  -f  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             10.1.1.1            tcp dpt:3389
ACCEPT     all  --  anywhere             anywhere            PHYSDEV match --physdev-is-bridged
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
DROP       all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  -f  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
« Последнее редактирование: 24.07.2010 01:07:29 от flint1975 »

Оффлайн Alukardd

  • Участник
  • *
  • Сообщений: 197
Извеняюсь, что сразу не попросил как надо...
скиньте пожалуйста вывод 2х команд
1 - iptables -vnL
2 - iptables -t nat -vnL
Debian Lenny 6.0, Ubuntu 10.04 Lucid Lynx

Оффлайн flint1975

  • Участник
  • *
  • Сообщений: 1 443
[root@router /]# [root@router /]# iptables -vnL
Chain INPUT (policy ACCEPT 21668 packets, 4982K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  -f  *      *       0.0.0.0/0            0.0.0.0/0   
 153K   42M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
    0     0 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:53
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:53
    0     0 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:20
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:20
    0     0 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:21
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:21
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:1194
    2    80 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:1194
    0     0 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:110
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:110
    0     0 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:995
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:995
    1    60 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:25
    0     0 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:465
    0     0 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:587
 1916  115K ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:22
    2   120 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:80
    0     0 ACCEPT     tcp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443
    0     0 ACCEPT     udp  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:443
   10   642 ACCEPT     icmp --  ppp1   *       0.0.0.0/0            0.0.0.0/0   
  265 11340 DROP       all  --  ppp1   *       0.0.0.0/0            0.0.0.0/0   

Chain FORWARD (policy ACCEPT 661 packets, 31728 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  -f  *      *       0.0.0.0/0            0.0.0.0/0   
13311 6899K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
   12   576 ACCEPT     tcp  --  *      *       0.0.0.0/0            10.1.1.1            tcp dpt:3389
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           PHYSDEV match --physdev-is-bridged
    0     0 ACCEPT     all  --  ppp1   *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    0     0 DROP       all  --  ppp1   *       0.0.0.0/0            0.0.0.0/0   

Chain OUTPUT (policy ACCEPT 13717 packets, 836K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  -f  *      *       0.0.0.0/0            0.0.0.0/0   
 155K   25M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
[root@router /]#
[root@router /]# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 7373 packets, 621K bytes)
 pkts bytes target     prot opt in     out     source               destination
   12   576 DNAT       tcp  --  *      *       0.0.0.0/0            193.33.144.130      tcp dpt:3389 to:10.1.1.1:3389

Chain POSTROUTING (policy ACCEPT 11337 packets, 691K bytes)
 pkts bytes target     prot opt in     out     source               destination
 2231  134K MASQUERADE  all  --  *      ppp1    0.0.0.0/0            0.0.0.0/0 

Chain OUTPUT (policy ACCEPT 12916 packets, 794K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            193.33.144.130      tcp dpt:3389 to:10.1.1.1:3389

Оффлайн Alukardd

  • Участник
  • *
  • Сообщений: 197
В общем полусонным ночным взглядом - так что если что не так скажу не сильно бейте.
на вскидку сразу несколько вопросов/замечаний.
1 - почему везде глухо рубятся любые фрагментированные пакеты(хотя таковых вроде он и не нашёл - но вопросов все же остался )???
2 - почему в INPUT описаны только dpt? Как бы не помешали бы строчки с разрешением на приём ответов web-серверов... iptables -A INPUT -i ppp1 -p tcp -m multiport --sport 80,443 -j ACCEPT - только смотрите что бы оно у вас перед последней строчкой с DROP оказалось - а то как-то не особо работать будет ;-)
3 -
4 -
в общем это к тому, что замечания еще есть... например операция MASQUERADE более громоздкая и ресурсоёмкая нежели SNAT и если IP у вас внешний статический, то лучше использовать SNAT. так же не понятно на кой хрен открыты udp порты(кроме dns и ftp разве что ну и openvpn - последний зависит от настроек) - если это все делалось автоматически через долбаный(да простят меня разработчики) web-интерфейс, то это одно, а если вы это все в ручную понаписали, то вам точно читать и читать.
А вообще вам стоит почитать про настройку iptables - например тут ну и на opennet что-нить...

Скажу сразу и точно, что то что я написал не исчерпывающий список и его можно да и нужно дополнять для того что бы всё у вас правильно заработало...
Debian Lenny 6.0, Ubuntu 10.04 Lucid Lynx

Оффлайн flint1975

  • Участник
  • *
  • Сообщений: 1 443
Спасибо за помощь, в общем буду рыть. А на самом деле фрагментация - может быть причиной!
Действительно все через web interface. Только вот именно это и надо, поскольку админить будет человек далекий от сети вообще.

Оффлайн Alukardd

  • Участник
  • *
  • Сообщений: 197
В вашем случае фрагментация - ТОЧНО НЕ ПРИЧИНА! у вас этот фильтр отфильтровал аж целых 0байт!!! оО
И не важно кто будет это дело администрировать и как... Пускай потом это делают через web-морду, а вы настраивайте так как вам удобно - у вас цель одна - все должно быть настроено и работать долго и без вмешательств...
Debian Lenny 6.0, Ubuntu 10.04 Lucid Lynx

Оффлайн flint1975

  • Участник
  • *
  • Сообщений: 1 443
Вопрос ! Как посмотреть текущие открытые соединения?
просто, я сравнил правила в работающих серваках - они идентичны!
На одном работает, на другом нет!

Оффлайн Alukardd

  • Участник
  • *
  • Сообщений: 197
netstat -na или можно еще lsof -i - напрмиер показывает все открытые соединения(локальные) - в общем-то они показывают открытые порты и установленные с ними соединения.
если вас интересуют сетевые подключения связанные с работой компа как шлюза то тогда так - cat /proc/net/ip_conntrack - тут все активные соединения в полной отчётной форме -- мб будет немного тяжелова-то читать, но других аналогичных команд я не знаю...
« Последнее редактирование: 25.07.2010 18:40:20 от Alukardd »
Debian Lenny 6.0, Ubuntu 10.04 Lucid Lynx

Оффлайн flint1975

  • Участник
  • *
  • Сообщений: 1 443
В общем странно, ничего так и не заработало.
NAT вроде бы ни при чем. Тогда не ясно как локализовать проблему.
Повторюсь еще раз:
При неиспользовании прокси доступны только некоторые сайты. Например yandex.ru google.com wiki.com, других не выявил. Поиск в ya.ru и google - работает. Однако, переход по найденным ссылкам - отсутствует (висит ожидание). Попытка отрыть www.microsoft.com - очень странно: сразу же "обозреватель не может отобразить эту страницу"
При этом не работает получение почты по pop3 со сторонних серверов (т.е. клиент к серверу подключается, авторизуется и висит на этапе получения списка писем).

Оффлайн XeLLi

  • Участник
  • *
  • Сообщений: 17
Если Вы пытаетесь идти во внешний интернет с клиента на сервере нужно копать цепочку forward, поскольку цепочка input действует для запросов непосредственно на сервер. Для этого проще всего включить логирование, перед дропом поставить -j LOG а затем все сообщения смотреть в /var/log/messages

Оффлайн flint1975

  • Участник
  • *
  • Сообщений: 1 443
Но DROP в цепочке FORWARD - пуст!!!

Оффлайн Alukardd

  • Участник
  • *
  • Сообщений: 197
во-первых цепочка INPUT всё-таки используется - хотя бы DNS-сервером...
во-вторых если работать всё-таки через прокси то тогда не используется цепочка FORWARD и все делает INPUT OUTPUT...
flint1975, вы изменили правила как я просил? -- добавили разрешения для входящих пакетов с исходящих портов 80,443tcp и 53udp???
Debian Lenny 6.0, Ubuntu 10.04 Lucid Lynx

Оффлайн XeLLi

  • Участник
  • *
  • Сообщений: 17
....Речь идет только об HTTP и HTTPS, при использовании проки - все хорошо. если на клиенте не настраивать прокси сервер - то работает нестабильно, и не до всех сайтов...
собственно говоря первый пост говорит о том, что человек хочет, чтобы без прокси ходило... а DNS можно настроить внутренний bind, чтобы форвардил на внешнии днс-хосты, а для внутреннего dns-сервера разумеется необходимо будет открыть порты в INPUT, но суть проблемы то не в этом. А проблема вероятней всего заключается в различиях mtu между внутренним и внешним интерфейсом. Чтобы исправить проблему нужно в цепочку mangle FORWARD (/etc/net/ifaces/default/fw/iptables/mangle/FORWARD) добавить -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
« Последнее редактирование: 26.07.2010 14:14:22 от XeLLi »