Автор Тема: Не работает NAT/MASQUERADE через PPPoE  (Прочитано 5746 раз)

yumashka

  • Гость
(предыдующую тему по nat и pppoe удалил, потому что все оказалось гораздо проще)

Проблема: не работает правило MASQ через pppoe интерфейс

Система: 5.0 Ковчег Сервер
Интерфейсы: eth/breth0 - внутренний, eth1/breth1 - Провайдер1 (обычный ethernet), eth2/breth2 - Провайдер2 (pppoe: имя созданного интерфейса ppp1).

PPPoE сконфигурирован и работает нормально. Проверялось пингами и wgetом с самого роутера.

Основные настройки NAT - через web-интерфейс. В настройках брандмауэра указан режим работы "шлюз (NAT)", внешними интерфейсами указаны ppp1 и breth1.  Снаружи внутрь проброшен 80-й порт через оба интерфейса.
В общем правила такие:
[root@router ~]# iptables -L PREROUTING -t nat -v -n
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            212.32.211.102      tcp dpt:80 to:192.168.2.8:80
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            88.200.158.176      tcp dpt:80 to:192.168.2.8:80
[root@router ~]# iptables -L POSTROUTING -t nat -v -n
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      breth1  0.0.0.0/0            0.0.0.0/0
    0     0 MASQUERADE  all  --  *      ppp1    0.0.0.0/0            0.0.0.0/0


По очереди тестируем работу внутреннего веб-сервера. Сначала - через breth1. Сервер откликается, все хорошо (в исходящих пакетах стоит IP интерфейса breth1, то есть маскарад сработал):
[root@router ~]# tcpdump -i breth1 port 80 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on breth1, link-type EN10MB (Ethernet), capture size 96 bytes
21:31:46.235384 IP 62.69.14.213.62658 > 192.168.2.8.http: S 2453428889:2453428889(0) win 8192 <mss 1460,nop,nop,sackOK>
21:31:46.235727 IP 212.32.211.102.http > 62.69.14.213.62658: S 3085645345:3085645345(0) ack 2453428890 win 8192 <mss 1460,nop,nop,sackOK>
21:31:46.242941 IP 62.69.14.213.62658 > 192.168.2.8.http: . ack 3085645346 win 64240
21:31:46.251982 IP 62.69.14.213.62658 > 192.168.2.8.http: P 0:488(488) ack 1 win 64240
21:31:46.252519 IP 212.32.211.102.http > 62.69.14.213.62658: FP 1:514(513) ack 489 win 64240
21:31:46.261513 IP 62.69.14.213.62658 > 192.168.2.8.http: . ack 515 win 63727
21:31:46.269614 IP 62.69.14.213.62658 > 192.168.2.8.http: F 488:488(0) ack 515 win 63727
21:31:46.269862 IP 212.32.211.102.http > 62.69.14.213.62658: . ack 490 win 64240


А вот при  работе через ppp1 сервер не откликается. Смотрим tcpdump на внешнем интерфейсе и видим, что в исходящих пакетах IP адрес источника не сменился:
[root@router ~]# tcpdump -i ppp1 port 80 and host 62.69.14.213 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ppp1, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
21:54:40.092542 IP 62.69.14.213.62707 > 192.168.2.8.http: S 1070528624:1070528624(0) win 8192 <mss 1460,nop,nop,sackOK>
21:54:40.092644 IP 192.168.2.8.http > 62.69.14.213.62707: S 3958726344:3958726344(0) ack 1070528625 win 8192 <mss 1460,nop,nop,sackOK>
21:54:43.092033 IP 192.168.2.8.http > 62.69.14.213.62707: S 3958726344:3958726344(0) ack 1070528625 win 8192 <mss 1460,nop,nop,sackOK>
21:54:43.094443 IP 62.69.14.213.62707 > 192.168.2.8.http: S 1070528624:1070528624(0) win 8192 <mss 1460,nop,nop,sackOK>
21:54:45.168087 IP 192.168.2.8.http > 62.69.14.213.62705: R 3951852646:3951852646(0) win 0
21:54:49.092236 IP 192.168.2.8.http > 62.69.14.213.62707: S 3958726344:3958726344(0) ack 1070528625 win 8192 <mss 1460,nop,nop,sackOK>
21:54:49.093708 IP 62.69.14.213.62707 > 192.168.2.8.http: S 1070528624:1070528624(0) win 8192 <mss 1460,nop,nop,sackOK>


То есть маскарад не срабатывает почему-то.
Попробовал по-другому, изменив руками правило через ppp1 (ну мало ли):
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      breth1  0.0.0.0/0            0.0.0.0/0
    0     0 SNAT       all  --  *      ppp1    192.168.2.0/24       0.0.0.0/0           to:88.200.158.176

Не помогает.


Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 370
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #1 : 18.12.2010 23:56:29 »
Надо настроить именно через Альтератор, или надо сделать так, чтобы работало ? Второе сделать не сложно. Первое - не знаю, так как не пользуюсь.

yumashka

  • Гость
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #2 : 19.12.2010 00:30:12 »
Надо настроить именно через Альтератор, или надо сделать так, чтобы работало ? Второе сделать не сложно. Первое - не знаю, так как не пользуюсь.

Надо сделать, чтобы работало. Альтератор не критичен. Я всю сознательную жизнь собственно руками (скриптами) все и делал (в том числе и DoD серваки с NATом во времена модемов). А по поводу "не сложно" - хотелось бы послушать. С учетом того, что пакеты, уходящие через ppp1 просто обязаны попадать во второе правило, но не попадают.

ЗЫ. Единственно чем отличается конфигурация от "привычного" мне: довеском в виде бриджей на каждом интерфейсе (да, я знаю, что из-за виртуализации). Можно, конечно попробовать снести и все сделать руками, но нафига тогда Альт? Хотелось пощупать его в боевых условиях. Мне тогда проще поставить Шапку, под которую у меня со времен RHEL3 тянется пачка скриптов.
« Последнее редактирование: 19.12.2010 00:35:56 от yumashka »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 370
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #3 : 19.12.2010 02:13:36 »
А по поводу "не сложно" - хотелось бы послушать. С учетом того, что пакеты, уходящие через ppp1 просто обязаны попадать во второе правило, но не попадают.
Не сложно - так как оно работает в принципе. Надо просто внимательно разобраться с правилами. А что будет, если DNAT тоже привязать к интерфейсам ? Или, попингать с 192.168.2.8 что-нибудь через ppp1 ? В общем, на первый взгляд, мне не нравится DNAT без привязки к интерфейсу.
Цитировать
Можно, конечно попробовать снести и все сделать руками, но нафига тогда Альт? Хотелось пощупать его в боевых условиях. Мне тогда проще поставить Шапку, под которую у меня со времен RHEL3 тянется пачка скриптов.
breth - это не самое основное в ALT. ;-) Кстати, я этот подход с breth не использую.

yumashka

  • Гость
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #4 : 19.12.2010 03:11:30 »
Не сложно - так как оно работает в принципе. Надо просто внимательно разобраться с правилами. А что будет, если DNAT тоже привязать к интерфейсам ? Или, попингать с 192.168.2.8 что-нибудь через ppp1 ? В общем, на первый взгляд, мне не нравится DNAT без привязки к интерфейсу.

imho, DNAT вообще не при делах. Я еще днем сразу после установки еще без dnat с чистым masq пробовал машины вывести наружу. Так вот маскарад через чистый ethernet работал, а через ppp1 упорно не хотел. То есть разница в правилах исключительно в именах интерфейсов. Там ни ipшников, ничего более.
Но я тогда не посмотрел tcpdump. А просто увидел, что возвращающиеся пакеты не попадают в related,established правило в цепочке forward, а падают в drop.
А они туда и не попадали, наверное по той же причине: проблема с маскарадом.
Это меня вообще переклинило и я домой поехал. Завтра (уже сегодня) снесу dnat и на чистом masq гляну tcpdumpом исходящие пакеты.


yumashka

  • Гость
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #5 : 19.12.2010 18:14:30 »
Проверил.
Когда ppp1 лежит и все изнутри идет через eth1 (Пров.1), то пакеты маскарадятся. Если поднимается ppp1 и весь трафик отравляется через него, то исходящие пакеты не маскарадятся.

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 242
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #6 : 19.12.2010 20:17:13 »
http://www.gentoo.org/doc/en/home-router-howto.xml#doc_chap7
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuдолжно помочь
« Последнее редактирование: 19.12.2010 20:20:16 от yaleks »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 370
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #7 : 19.12.2010 20:30:35 »
Если поднимается ppp1 и весь трафик отравляется через него, то исходящие пакеты не маскарадятся.
Странно. Полностью симитировать ситуацию сейчас не могу, но повесил на lo 10.1.1.1/32, сделал бридж, включил в него eth0. через ppp всё маскарадится (ping -I  10.1.1.1 <host>). Ситуация ведь простейшая, обязано работать. Система - бранч 5.1, ядро 2.6.27-ovz-smp-alt13.M51.3
« Последнее редактирование: 10.01.2011 17:48:44 от asy »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 370
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #8 : 19.12.2010 20:32:02 »
http://www.gentoo.org/doc/en/home-router-howto.xml#doc_chap7
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuдолжно помочь
Не должно. У него банально NAT не срабатывает, а не с MTU проблемы.

Оффлайн romario

  • Участник
  • *
  • Сообщений: 621
    • ЮНИКС
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #9 : 20.12.2010 14:55:03 »
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      breth1  0.0.0.0/0            0.0.0.0/0
    0     0 MASQUERADE  all  --  *      ppp1    0.0.0.0/0            0.0.0.0/0


это уберите:
    0     0 MASQUERADE  all  --  *      breth1  0.0.0.0/0            0.0.0.0/0

оно ваще не нужно из-за него скорее всего и не работает.

а вообще лучше снесите breth интерфейсы и сделайте все на eth  интерфейсах, я всегда так делаю все работает.
« Последнее редактирование: 20.12.2010 14:57:12 от romario »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 370
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #10 : 20.12.2010 15:59:49 »
это уберите:
    0     0 MASQUERADE  all  --  *      breth1  0.0.0.0/0            0.0.0.0/0
ppp1 у него к  breth2 привязан, на сколько я понимаю.

yumashka

  • Гость
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #11 : 27.12.2010 22:27:21 »
это уберите:
    0     0 MASQUERADE  all  --  *      breth1  0.0.0.0/0            0.0.0.0/0
оно ваще не нужно из-за него скорее всего и не работает.
а вообще лучше снесите breth интерфейсы и сделайте все на eth  интерфейсах, я всегда так делаю все работает.

это маскарад через первого провайдера (когда пакеты таки на него уходят).
второй провайдер: это ppp1 через breth2.

А вообще, было бы время, я бы действительно снес бы бриджи и сделал бы все на eth. Но времени не было разбираться и экспериментировать, поэтому поставил человеку другой дистр (с которым уже 10 лет работаю).

PS. Кстати о виртуализации. Хорошо бы сделать, что если ни kvm, ни ovz не установлены, то бриджи не создаются. Либо вообще сделать как в RH: админ делает бриджи сам, что четко и по шагам описано в документации.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 370
Re: Не работает NAT/MASQUERADE через PPPoE
« Ответ #12 : 29.12.2010 01:09:02 »
А вообще, было бы время, я бы действительно снес бы бриджи и сделал бы все на eth. Но времени не было разбираться и экспериментировать,
Там за 30 секунд всё переделывается в /etc/net/ifaces. Но таки да, сначала надо чуть-чуть про etcnet почитать.
Цитировать
PS. Кстати о виртуализации. Хорошо бы сделать, что если ни kvm, ни ovz не установлены, то бриджи не создаются. Либо вообще сделать как в RH: админ делает бриджи сам, что четко и по шагам описано в документации.
Вообще-то оно в одном конкретном дистрибутиве так, если мне склероз не изменяет.