Jump to content

Recommended Posts

Posted

Схема такая. В сети поднят DHCP, который выдает белые и серые IP адреса. Белые ходят в интернет, серые тухнут на NAS сервер.

Как можно сделать с помощью iptables что бы весь трафик с серых IP перенаправлялся на биллинг сервер на 80 порт (личный кабинет пользователя)

Posted

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 подставить свой диапазон серости

Posted

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 адрес биллинг

Posted

Подогнал правило под себя

 

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

Posted (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 by KotikBSd
Posted (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 by FATHER_FBI

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.