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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Завернуть трафик с eth на lo.  (Прочитано 10803 раз)

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

Оффлайн Jolly Roger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Завернуть трафик с eth на lo.
« : 27 Июня 2017, 12:57:08 »
Доброго времени суток.
В системе 2 интерфейса, eth0 и lo, на lo запущен сквид, на этой же машине запущен браузер, запросы из которого ухочят с eth0. Нужно завернуть 443 и 80 порты на lo в сквид а затем выпустить это через eth0. если сделать так:
iptables -t nat -A OUTPUT -p tcp -s 192.168.1.3 --dport 80 -j DNAT --to-destination 127.0.0.1:3130
iptables -t nat -A OUTPUT -p tcp -s 192.168.1.3 --dport 443 -j DNAT --to-destination 127.0.0.1:3131
образуется петля, может есть способ это решить?
Пока видится это так, сделать в системе br0, навесить на него ip, удалить маршрут поумолчанию, прописать маршрут по умолчанию в dev br0, маркировать пакеты вылетающие из br0 и заворачивать их выше упомянутыми правилами, а пакеты которые уже промаркированы отправлять в другую таблицу маршрутизации в которую предварительно добавлен eth0 и маршрут по умолчанию в него.
Но что-то не мне нравится такой вариант т.к. с iptables и iproute не очень и через полгода можно не вспонить что и зачем сделано (хотя можно добавить комментарии).

Пользователь добавил сообщение 27 Июня 2017, 14:05:33:
Попробовал так:
iptables -t nat -A OUTPUT -m mark --mark 2 -j ACCEPT
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3130
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 443 -j DNAT --to-destination 127.0.0.1:3131
iptables -t mangle -A OUTPUT -s 127.0.0.1 -j MARK --set-mark 2

всеравно петля..

промаркированный пакет на выходе lo почемуто не попадает в правило, или что-то работает не так как я думаю )
iptables -L -nv -t nat

Chain OUTPUT (policy ACCEPT 16 packets, 982 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            mark match 0x2
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:127.0.0.1:3130
  516 30960 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 to:127.0.0.1:3131


Пользователь добавил сообщение 27 Июня 2017, 14:14:29:
Какието пакеты начали появляться после очистки filter, было лишнее правило, теперь весь iptables состаит из 4х вышеуказанных правил, но всеравно петля, система уходит в swap.
Chain OUTPUT (policy ACCEPT 16 packets, 1012 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   24  1440 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            mark match 0x2
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:127.0.0.1:3130
 1112 66720 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 to:127.0.0.1:3131

Пользователь добавил сообщение 27 Июня 2017, 14:24:46:
Заменил:
iptables -t mangle -A OUTPUT -s 127.0.0.1 -j MARK --set-mark 2на
iptables -t mangle -A INPUT -i lo -j MARK --set-mark 2и пакетов снова не видно:
Chain OUTPUT (policy ACCEPT 47 packets, 2731 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            mark match 0x2
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:127.0.0.1:3130
  508 30480 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 to:127.0.0.1:3131


Пользователь добавил сообщение 27 Июня 2017, 14:25:46:
Какоето колдовство.. Где ошибка?
« Последнее редактирование: 27 Июня 2017, 14:25:46 от Jolly Roger »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Завернуть трафик с eth на lo.
« Ответ #1 : 28 Июня 2017, 15:10:28 »
-j REDIRECT
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн Jolly Roger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Re: Завернуть трафик с eth на lo.
« Ответ #2 : 29 Июня 2017, 04:25:07 »
Здравствуйте.
Переместил сквид на eth и сделал:
modprobe iptable_nat
modprobe ip_conntrack
echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A OUTPUT -m mark --mark 2 -j ACCEPT
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j MARK --set-mark 2
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 443 -j MARK --set-mark 2
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3130
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3131
в логах сквида:
2017/06/28 21:23:33 kid1| WARNING: Forwarding loop detected for:
GET /favicon.ico HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Via: 1.1 debian (squid/3.5.26)
X-Forwarded-For: unknown
Cache-Control: max-age=259200
Connection: keep-alive
Host: mail.ru
в счетчиках:
iptables -L -nv -t nat
Chain OUTPUT (policy ACCEPT 39 packets, 2586 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            mark match 0x2
   22  1320 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 MARK set 0x2
  987 59220 MARK       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 MARK set 0x2
   22  1320 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 redir ports 3130
  987 59220 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 redir ports 3131
« Последнее редактирование: 29 Июня 2017, 04:28:43 от Jolly Roger »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Завернуть трафик с eth на lo.
« Ответ #3 : 29 Июня 2017, 14:02:36 »
А так всё и будет.
Можете попробовать перевести кальмара в intercept, но опять же вряд ли что-то получится.
Ибо вы хотите странного.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн Jolly Roger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Re: Завернуть трафик с eth на lo.
« Ответ #4 : 29 Июня 2017, 15:04:35 »
Он сейчас и настроен в intercept т.к. нужен именно прозрачный режим, если в браузере указать прокси явно на локалхост и сквид (без intercept) повесить тудаже то все работает без всяких костылей с iptables.

Пользователь добавил сообщение 29 Июня 2017, 15:06:14:
А так всё и будет.
Почему? Не может быть такого что метка не навешивается потому что не подгружен какойто модуль или снимается при пролете через сквид?
« Последнее редактирование: 29 Июня 2017, 15:06:14 от Jolly Roger »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: Завернуть трафик с eth на lo.
« Ответ #5 : 29 Июня 2017, 15:29:44 »
Метка при пролёте через кальмара не слетает, а просто пропадает вместе с пакетом, ибо он уже доходит до конечной цели (сквид) и прекращает своё существование.

Оффлайн Jolly Roger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Re: Завернуть трафик с eth на lo.
« Ответ #6 : 30 Июня 2017, 03:52:27 »
Точно, этож не маршрутизатор), переделал так:
modprobe iptable_nat
modprobe ip_conntrack
echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -A INPUT -i lo -j ACCEPT
iptables -t nat -A OUTPUT -m mark --mark 2 -j ACCEPT
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3130
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 443 -j DNAT --to-destination 127.0.0.1:3131
iptables -t nat -A OUTPUT -o lo -p tcp -m tcp --dport 80 -j MARK --set-mark 2
iptables -t nat -A OUTPUT -o lo -p tcp -m tcp --dport 443 -j MARK --set-mark 2



netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 127.0.0.1:3130          0.0.0.0:*               LISTEN      1480/(squid-1)     
tcp        0      0 127.0.0.1:3131          0.0.0.0:*               LISTEN      1480/(squid-1)     
tcp        0      0 127.0.0.1:3132          0.0.0.0:*               LISTEN      1480/(squid-1) 
   

iptables -L -nv -t nat
Chain PREROUTING (policy ACCEPT 1 packets, 257 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 1 packets, 257 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 35 packets, 2598 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            mark match 0x2
   66  3960 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:127.0.0.1:3130
24006 1440K DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 to:127.0.0.1:3131
    0     0 MARK       tcp  --  *      lo      0.0.0.0/0            0.0.0.0/0            tcp dpt:80 MARK set 0x2
    0     0 MARK       tcp  --  *      lo      0.0.0.0/0            0.0.0.0/0            tcp dpt:443 MARK set 0x2

Chain POSTROUTING (policy ACCEPT 24107 packets, 1447K bytes)
 pkts bytes target     prot opt in     out     source               destination         


И система уходит в swap, в логе сквида:
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
2017/06/29 20:50:00 kid1| Queue overload, rejecting
« Последнее редактирование: 30 Июня 2017, 03:54:02 от Jolly Roger »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: Завернуть трафик с eth на lo.
« Ответ #7 : 30 Июня 2017, 08:53:14 »
Ядро не различает Ваш браузер и кальмара. Для него это просто локальные приложения, спешащие в интернет.

Оффлайн Jolly Roger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Re: Завернуть трафик с eth на lo.
« Ответ #8 : 01 Июля 2017, 15:00:07 »
Подумав над изложенным выше, решил посмотреть в сторону "как различить ядру" браузер и squid.
И вот что увидел, оказывается squid умеет навешивать метки tos на исходящие пакеты, отвечает за это директива tcp_outgoing_tos, чтобы она работала, при сборке squid нужно указать соответствующие опции конфигурации, делаем в конфиге после секции acl tcp_outgoing_tos 0x30 localnet, в iptables указываем:
iptables -t nat -A OUTPUT -m tos --tos 0x30 -j ACCEPT
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3130
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3131
И радуемся жизни.
Спасибо всем принимавшим участие.
« Последнее редактирование: 01 Июля 2017, 15:03:11 от Jolly Roger »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: Завернуть трафик с eth на lo.
« Ответ #9 : 02 Июля 2017, 07:40:13 »
Про параметр кальмара не знал (ибо подобных задач не стояло), решение задачи на "отлично".
Снимаю шляпу и жму кнопку "Спасибо".

 

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