FATHER_FBI Posted October 15, 2012 Схема такая. В сети поднят DHCP, который выдает белые и серые IP адреса. Белые ходят в интернет, серые тухнут на NAS сервер. Как можно сделать с помощью iptables что бы весь трафик с серых IP перенаправлялся на биллинг сервер на 80 порт (личный кабинет пользователя) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted October 15, 2012 iptables -t nat -I PREROUTING -i eth0 -p tcp -s 10.0.0.0/8 ! -d 10.0.0.0/8 --dport 80 -j DNAT --to-destination ип_личного_кабинета:80 вместо 10/8 подставить свой диапазон серости Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
FATHER_FBI Posted October 15, 2012 iptables -t nat -I PREROUTING -i eth0 -p tcp -s 10.0.0.0/8 ! -d 10.0.0.0/8 --dport 80 -j DNAT --to-destination ип_личного_кабинета:80 вместо 10/8 подставить свой диапазон серости Подогнал правило под себя iptables -t nat -I PREROUTING -i eth1.209 -p tcp -s 10.1.0.0/8 ! -d 10.1.0.0/8 --dport 80 -j DNAT --to-destination 91.*.*.158:80 не работает. Уже тонну мануалов перерыл. Вот что говорит tcpdump на NAS root@nas3:~# tcpdump -n host 10.1.0.3 tcpdump: WARNING: eth1: no IPv4 address assigned tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes 09:48:31.317385 IP 10.1.0.3.1087 > 213.180.193.3.80: Flags [s], seq 452347902, win 65535, options [mss 1460,nop,nop,sackOK], length 0 09:48:31.914375 IP 10.1.0.3.1088 > 213.180.193.3.80: Flags [s], seq 1399971826, win 65535, options [mss 1460,nop,nop,sackOK], length 0 09:48:34.817184 IP 10.1.0.3.1088 > 213.180.193.3.80: Flags [s], seq 1399971826, win 65535, options [mss 1460,nop,nop,sackOK], length 0 213.180.193.3 это IP адрес яндекса. На тестовой машине в браузере я набираю ya.ru Вот что говорит tcpdump на биллинге root@my:~# tcpdump -n host 10.1.0.3 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 13:48:17.299280 IP 10.1.0.3.1087 > 91.*.*.158.80: Flags [s], seq 452347902, win 65535, options [mss 1460,nop,nop,sackOK], length 0 13:48:17.299323 IP 91.*.*.158.80 > 10.1.0.3.1087: Flags [s.], seq 409408263 0, ack 452347903, win 5840, options [mss 1460,nop,nop,sackOK], length 0 13:48:17.299586 IP 10.1.0.3.1087 > 91.*.*.158.80: Flags [R], seq 452347903, win 0, length 0 13:48:23.314824 IP 10.1.0.3.1087 > 91.*.*.158.80: Flags [s], seq 452347902, win 65535, options [mss 1460,nop,nop,sackOK], length 0 13:48:23.314860 IP 91.*.*.158.80 > 10.1.0.3.1087: Flags [s.], seq 418807538 9, ack 452347903, win 5840, options [mss 1460,nop,nop,sackOK], length 0 13:48:23.315070 IP 10.1.0.3.1087 > 91.*.*.158.80: Flags [R], seq 452347903, win 0, length 0 13:48:23.911814 IP 10.1.0.3.1088 > 91.*.*.158.80: Flags [s], seq 1399971826 , win 65535, options [mss 1460,nop,nop,sackOK], length 0 13:48:23.911829 IP 91.*.*.158.80 > 10.1.0.3.1088: Flags [s.], seq 738921429 , ack 1399971827, win 5840, options [mss 1460,nop,nop,sackOK], length 0 13:48:23.912311 IP 10.1.0.3.1088 > 91.*.*.158.80: Flags [R], seq 1399971827 , win 0, length 0 13:48:26.814884 IP 10.1.0.3.1088 > 91.*.*.158.80: Flags [s], seq 1399971826 , win 65535, options [mss 1460,nop,nop,sackOK], length 0 13:48:26.814914 IP 91.*.*.158.80 > 10.1.0.3.1088: Flags [s.], seq 784282069 , ack 1399971827, win 5840, options [mss 1460,nop,nop,sackOK], length 0 13:48:26.815498 IP 10.1.0.3.1088 > 91.*.*.158.80: Flags [R], seq 1399971827 , win 0, length 0 91.*.*.158.80 это IP адрес биллинг Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
orlik Posted October 15, 2012 Подогнал правило под себя iptables -t nat -I PREROUTING -i eth1.209 -p tcp -s 10.1.0.0/8 ! -d 10.1.0.0/8 --dport 80 -j DNAT --to-destination 91.*.*.158:80 добавьте iptables -t nat -I POSTROUTING -i eth1.209 -p tcp -s 10.1.0.0/8 ! -d 10.1.0.0/8 --dport 80 -j SNAT --to x.x.x.x где x.x.x.x ip интерфейса этого роутера который смотрит в сторону 91.*.*.158 т.е. вам нужно делать nat 2 раза, либо как вариант: поднимаете на этом роутере http сервер (apache lighttpd mini-httpd) и настраиваете для всего трафика редирект на 91.*.*.158 (т.е. http сервер всегда отвечает пользователю редиректом на биллинг). после этого можно будет сделать iptables -t nat -I PREROUTING -i eth1.209 -p tcp -s 10.1.0.0/8 ! -d 10.1.0.0/8 --dport 80 -j REDIRECT --to 91.*.*.158 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
KotikBSd Posted October 15, 2012 (edited) двойной нат не удобен тем что в биллинге вы получите IP вашего НАСа, а не абонента, можно конечно решить двойным редиректом... я лично предпочел ставить nginx на nasах, это не требует ресурсов сервера... за то достаточно обычного редиректа в иптайлесе: iptables -t nat -A PREROUTING ! -d 10.0.0.0/8 -i vlan256 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 81 (точим под себя.) конфиг выглядит так: server { keepalive_timeout 3; listen 81; server_name localhost; access_log off; access_log /var/log/nginx-no_access main; if ($http_user_agent ~ "MailRuSputnik") { return 503; } if ($http_user_agent ~ "torrent") { return 503; } if ($http_user_agent ~ "Torrent") { return 503; } if ($http_user_agent ~ "Windows-Update-Agent") { return 503; } if ($http_user_agent ~ "Microsoft NCSI") { return 503; } if ($http_user_agent ~ "NOD32 Update") { return 503; } if ($http_user_agent ~ "ESS Update") { return 503; } if ($http_user_agent ~ "Google Update") { return 503; } add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"; add_header Pragma "no-cache"; expires -1; add_header Last-Modified $sent_http_Expires; rewrite .* http://ваш-сайт/block/no_access.php?$remote_addr|__|$local_day|__|http://$host$uri redirect; location / { root /var/www; deny all; } } т.к. я вставил в строку редиректа время-дату, то в основной секции nginx у меня ещё есть строчка: perl_set $local_day 'sub { my @x = localtime; return sprintf "%04u-%02u-%02u_%02u:%02u:%02u", $x[5]+1900, $x[4]+1, $x[3], $x[2],$x[1],$x[0] }'; п.с. требует сборки nginx с поддержкой perl, но более красивого решения как вставить время редиректа в урл - я не нашел :( в итоге абонент получает страницу на сайте провайдера с ошибкой и комментариями, ссылкой куда он пытался перейти. все настройки подобраны что бы кеширования не было вообще, хотя нужно признать иногда случается, глюки браузеров... и в этот момент какраз помогает время дата в ссылке, можно сразу понять, это глюк и правило не добавилось, или тупой кеш со вчерашнего дня :) логи советую отключать после тестов, ибо не к чему они.... забросы от свяких левых программ отбрасываем, ибо ни к чему им отсылать html страницы если они ждут чего-то другого, это нам позволит снизить нагрузку на сайт, ибо обычно эти проги получая в ответ не то чего они ожидали долбятся до потери пульса каждую секунду :) вполне возможно что в список можно добавить ещё что-то, составлялся давно на основе логов... Edited October 15, 2012 by KotikBSd Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
FATHER_FBI Posted October 16, 2012 (edited) Всем спасибо за подсказку. Решил все таким способом iptables -t nat -A PREROUTING -i eth1.209 -p tcp -s 10.0.0.0/8 -j DNAT --to-destination 91.*.*.153:80 iptables -t nat -A PREROUTING -i eth1.209 -p udp -s 10.0.0.0/8 -j DNAT --to-destination 91.*.*.153:80 И прописаным route на биллинге что бы пакеты обратно на источник уходили 10.1.0.0 91.*.*.153 255.255.252.0 UG 0 0 0 eth0 Edited October 16, 2012 by FATHER_FBI Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...