Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: pppoe+ethernet->WEB+NAT->ethernet в локалку не работает  (Прочитано 1605 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Scherkhan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
  • Глюк — любимый композитор всех программистов
    • Просмотр профиля
    • NET.ScherkhanLab
Коллеги, прошу консультации.
Что есть:
Два белых IP - один по ethrnet, другой по PPPOE через другой ethernet.
Сервер Ubuntu 12.04
В локалку смотрит ещё один ethernet
Сервер используется как WEB во внешнюю сторону и как NAT в локалку. На сервере Апач, мускл  и т.п. для сайтов, DNS в обе стороны + DHCP в локалку.
Что происходит: Если поднимаю pppoe соединение ppoeconf, при установки со всем, кроме MTU, соглашаюсь, затем прописываю в
rc.local
iptables -F
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i ppp0 -o ppp0 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

, то все работает просто отлично, и WEB, и NAT. Задача заключается в следующем, весь трафик из локальной сети выпустить не через pppoe, а через второй интерфейс, оставив полностью работующий WEB на pppoe соединении.
Что для этого делал: вначале, в файле  dsl-provider - defaultroute менял на nodefaultroute.
Затем в rc.local переписывал следующую маршрутизацию:
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth2 -j SNAT --to-source 109.173.118.87
iptables -A FORWARD -i eth2 -o eth2 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

После, чего весь трафик с локалки пошел через второй интерфейс - все нормально.
Но WEB сервер перестаёт быть полностью доступен по pppoe. В общем то вопрос банален - что делать? Перекурил кучу тем про iptables - в голове больше каши, чем простого решения. Подскажите пожалуйста.
ipconfig:
ifconfig
eth0      Link encap:Ethernet  HWaddr 90:94:e4:82:04:97
          inet addr:192.168.0.5  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::9294:e4ff:fe82:497/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:39589 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42766 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6360319 (6.3 MB)  TX bytes:31684632 (31.6 MB)

eth1      Link encap:Ethernet  HWaddr 90:94:e4:82:ca:af
          inet addr:10.80.190.136  Bcast:10.83.255.255  Mask:255.252.0.0
          inet6 addr: fe80::9294:e4ff:fe82:caaf/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:216013 errors:0 dropped:0 overruns:0 frame:0
          TX packets:126229 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:292092752 (292.0 MB)  TX bytes:12961543 (12.9 MB)

eth2      Link encap:Ethernet  HWaddr 00:1f:c6:b6:12:e5
          inet addr:109.173.118.87  Bcast:109.173.119.255  Mask:255.255.254.0
          inet6 addr: fe80::21f:c6ff:feb6:12e5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:103 errors:0 dropped:0 overruns:0 frame:0
          TX packets:95 errors:0 dropped:0 overruns:0 carrier:2
          collisions:0 txqueuelen:1000
          RX bytes:11926 (11.9 KB)  TX bytes:8556 (8.5 KB)
          Память:dffc0000-e0000000

lo        Link encap:Локальная петля (Loopback)
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:553 errors:0 dropped:0 overruns:0 frame:0
          TX packets:553 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:63035 (63.0 KB)  TX bytes:63035 (63.0 KB)

ppp0      Link encap:Протокол PPP (Point-to-Point Protocol)
          inet addr:213.141.129.199  P-t-P:212.1.254.115  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:214857 errors:0 dropped:0 overruns:0 frame:0
          TX packets:125972 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:287249160 (287.2 MB)  TX bytes:10181113 (10.1 MB)

teredo    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet6 addr: fe80::ffff:ffff:ffff/64 Scope:Link
          inet6 addr: 2001:0:53aa:64c:30c7:7640:2a72:7e38/32 Scope:Общий
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1280  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:1152 (1.1 KB)  TX bytes:1680 (1.6 KB)
--
Первая компьютерная война началась после того, как пингвин разбил яблоком окно.
Совершенство достигнуто не тогда, когда нечего добавить, а когда нечего удалить.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28478
    • Просмотр профиля
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Scherkhan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
  • Глюк — любимый композитор всех программистов
    • Просмотр профиля
    • NET.ScherkhanLab
Большое спасибо за ответ! Но к сожалению эту тему я уже курил. Результат был довольно интересным.
Первоисточник взят отсюда https://help.ubuntu.ru/wiki/ip_balancing - Второй вариант. Если посмотреть на предложенный Вами вариант и взятый мной из форума, то в принципе они выполняют одну и ту же функцию. Если изходить из этой мысли, то мой опыт закончился следующим: всё выше описанное работает только в том случае, если к серверу подведено два соединения либо stattic, либо DHCP (не принципиально). В этом случае все работает просто супер - и натинг и балансировка согласно заданных весов и .т.д. Ну логика моя естественно решила, раз так, то заменив данные в скрипте на PPPOE - все должно работать. А не тут то было... Заменив, соединение поднялось, скрипт (в моем случае), написал, что все ок - работают два соединения (т.е. пинг проходит)... НО через PPPOE ничего не проходит, ни один пакет.
Задумался. Пришлось курить дальше... Нашел только одно пространное объяснение на просторах инета, что такого вида раутинг и не будет работать, т.к. static и dhcp работают на втором уровне, а PPPOE - на 3-ем соответственно. Что за уровни объяснено не было. (могу только догадаться).
Тогда соответственно пришла мысль как то обойти данный препон. Не балансировать трафиком, а просто выпустить все локальные запросы в интернет через второй интерфейс (в моем случае это eth2), оставив ppp0 общаться с внешним миром как WEB сервер. Но и тут загвоздка получилась. ИМХО все упирается в это PPPOE соединение. Почему - не понимаю.
Ещё раз позволю себе озвучить задачу, может я её не внятно объяснил.
1. Организовать весь NATинг в локальную сеть через eth2
2. Оставить открытым 53 порт на eth2 для прослушки из вне (на нем slave DNS откликается)
3. Все запросы приходящие на pppoe - обрабатываются WEB, Master DNS, Apache и т.п. (NAT с этого интерфейса не осуществляется).

--
Первая компьютерная война началась после того, как пингвин разбил яблоком окно.
Совершенство достигнуто не тогда, когда нечего добавить, а когда нечего удалить.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28478
    • Просмотр профиля
Функции В ПРИНЦИПЕ разные. Я решал проблему маршрутизации ВХОДЯЩИХ соединений, а балансировка IP решает вопросы маршрутизации исходящих соединений (не вчитывался, не знаю, как там разруливаются (разруливаются ли вообще) входящие).
А вот решение применяется - похожее.
В моём случае, какой из интерфейсов является шлюзом по умолчанию, строго пофиг.

P.S.
Весь этот бред про уровни неоднократно уже высмеивался и осуждался.
Ну не работает оно, НЕ РАБОТАЕТ так, как хотели выдумщики этой байды. Сто раз дешевле и проще забить на все уровни и реализовать взаимодействие так, как позволяет оборудование.
« Последнее редактирование: 21 Июня 2013, 04:24:22 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Scherkhan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
  • Глюк — любимый композитор всех программистов
    • Просмотр профиля
    • NET.ScherkhanLab
Спасибо ещё раз AnrDaemon - навел на мысль, что делать. И так, всё заработало... Кому интересно - как и что делал. Ещё раз повторю, что к серверу подведено два белых IP; один статический - ethernet, другой через pppoe лежащем на dhcp ethernet. Ставить раутеры нельзя (условие)   
Этап первый.
Отключаем полностью PPPoE соединение, перезагружаемся и выводим:
# ip route list table main
default via 109.173.118.1 dev eth2  metric 100
10.0.0.0/8 via 10.80.0.1 dev eth1
10.80.0.0/14 dev eth1  proto kernel  scope link  src 10.82.112.104
77.246.96.90 via 10.80.0.1 dev eth1
77.246.96.96/27 via 10.80.0.1 dev eth1
109.173.118.0/23 dev eth2  proto kernel  scope link  src 109.173.118.87
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.5
212.1.254.115 dev ppp0  proto kernel  scope link  src 213.141.129.199
233.49.170.0/24 via 10.82.112.104 dev eth1  scope link
у меня такого вида получилось. Ок!!! Пусть будет так.
Теперь подключаем обратно PPPoE, можно даже заново запустить pppoeconf.
Ещё раз выводим таблицу main:
# ip route list table main
default dev ppp0  scope link
10.0.0.0/8 via 10.80.0.1 dev eth1
10.80.0.0/14 dev eth1  proto kernel  scope link  src 10.82.112.104
77.246.96.90 via 10.80.0.1 dev eth1
77.246.96.96/27 via 10.80.0.1 dev eth1
109.173.118.0/23 dev eth2  proto kernel  scope link  src 109.173.118.87
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.5
212.1.254.122 dev ppp0  proto kernel  scope link  src 213.141.129.199
233.49.170.0/24 via 10.82.112.104 dev eth1  scope link

Смотрим внимательно различия этих файлов. В них различается только первая строчка. Если учесть (описывал выше), что во втором варианте (PPPoE) подключения все работает и натинг и внешний вэб, а в первом только натинг, то напрашивается небольшой кульбит с iptables.
Этап 2.
Создаём таблицу маршрутизации
echo 252 web >> /etc/iproute2/rt_tablesТеперь эту таблицу нужно заполнить. Делаем так:
nano /etc/iproute2/routingВ файл вставляем следующее содержание:
#!/bin/bash

ip rule add from 192.168.0.10/24 table web

ip route add default via 109.173.118.1 dev eth2  metric 100 table web
ip route add 10.0.0.0/8 via 10.80.0.1 dev eth1 table web
ip route add 10.80.0.0/14 dev eth1  proto kernel  scope link  src 10.82.112.104 table web
ip route add 77.246.96.90 via 10.80.0.1 dev eth1 table web
ip route add 77.246.96.96/27 via 10.80.0.1 dev eth1 table web
ip route add 109.173.118.0/23 dev eth2  proto kernel  scope link  src 109.173.118.87 table web
ip route add 192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.5 table web
ip route add 212.1.254.115 dev ppp0  proto kernel  scope link  src 213.141.129.199 table web
ip route add 233.49.170.0/24 via 10.82.112.104 dev eth1  scope link table web

ip route flush cache
Первая строчка заставляет все приходящие из локальной сети пакеты обрабатываться таблицей (в моем случае) "web".
Остальные строчки просто скопированы из таблицы main, полученной при отключенном pppoe. В их начало добавлено "ip route add", а в конец  - "table web".
Последняя - очищает кэш таблицы.
Этап 3. Заставляем это все работать в автоматическом режиме:
nano /etc/rc.locaДобавляем (или редактируем) содержание:
/etc/iproute2/routing

iptables -F
iptables -t nat -A POSTROUTING -s 192.168.0.10/16 -o eth2 -j SNAT --to-source 109.173.118.87
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i ppp0 -o ppp0 -j REJECT
iptables -A FORWARD -i eth2 -o eth2 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Ну вот и всё... Цель достигнута. WEB сервер полностью пашет с внешней стороны по PPPoE, а NAT идёт через второй статический интерфейс.
--
Первая компьютерная война началась после того, как пингвин разбил яблоком окно.
Совершенство достигнуто не тогда, когда нечего добавить, а когда нечего удалить.

 

Страница сгенерирована за 0.072 секунд. Запросов: 25.