tranger Posted June 12, 2018 Добрый день. Стоит Centos 7. Есть интерфейс eth0 с 253 белыми IP адресами: 1.1.1.2 - 1.1.1.254 Требуется с помощью iptables настроить редирект следующим образом: При подключении к 127.0.0.1:100 трафик должен пойти к 1.2.3.4:10001 через 1.1.1.2 При подключении к 127.0.0.1:101 трафик должен пойти к 1.2.3.4:10001 через 1.1.1.3 и т.д. Подскажите как это реализовать. Спасибо. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zhenya` Posted June 12, 2018 Snat + dnat? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
murano Posted June 12, 2018 Лаба, что ли? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted June 12, 2018 2 часа назад, zhenya` сказал: Snat + dnat? Мало, ещё рдр/фвд нужен чтобы в правильный нехтхоп выплюнуть. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted June 12, 2018 3 hours ago, Ivan_83 said: Мало, ещё рдр/фвд нужен чтобы в правильный нехтхоп выплюнуть. Ну для этого рулезы есть. ip rule Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted June 12, 2018 На базе conntrack/nat root@bpi-iot-ros-ai:/home/pi# ifconfig eth0:1 192.168.3.212/24 root@bpi-iot-ros-ai:/home/pi# ifconfig eth0:2 192.168.3.213/24 sysctl net.ipv4.ip_forward=1 sysctl net.ipv4.conf.all.route_localnet=1 sysctl net.ipv4.conf.eth0.route_localnet=1 iptables -t mangle -I OUTPUT -d 127.0.0.1 -p tcp --dport 100 -j MARK --set-mark 100 iptables -t nat -I OUTPUT -d 127.0.0.1 -p tcp --dport 100 -j DNAT --to 87.250.250.242:80 iptables -t nat -I POSTROUTING -m mark --mark 100 -j SNAT --to-source 192.168.3.212 iptables -t mangle -I OUTPUT -d 127.0.0.1 -p tcp --dport 101 -j MARK --set-mark 101 iptables -t nat -I OUTPUT -d 127.0.0.1 -p tcp --dport 101 -j DNAT --to 87.250.250.242:80 iptables -t nat -I POSTROUTING -m mark --mark 101 -j SNAT --to-source 192.168.3.213 Проверка: root@bpi-iot-ros-ai:/home/pi# tcpdump -i any -n -nn -s 0 "host 87.250.250.242" & root@bpi-iot-ros-ai:/home/pi# curl http://127.0.0.1:100/ 1>/dev/null 2>/dev/null 22:57:23.028390 IP 192.168.3.212.46098 > 87.250.250.242.80: Flags [S], seq 3802718458, win 43690, options [mss 65495,sackOK,TS val 604364 ecr 0,nop,wscale 6], length 0 22:57:23.028390 IP (tos 0x0, ttl 64, id 55350, offset 0, flags [DF], proto TCP (6), length 60) 192.168.3.212.46098 > 87.250.250.242.80: Flags [S], cksum 0x1798 (incorrect -> 0xdaed), seq 3802718458, win 43690, options [mss 65495,sackOK,TS val 604364 ecr 0,nop,wscale 6], length 0 22:57:23.041198 IP (tos 0x0, ttl 47, id 39480, offset 0, flags [none], proto TCP (6), length 60) 87.250.250.242.80 > 192.168.3.212.46098: Flags [S.], cksum 0x111d (correct), seq 2877491049, ack 3802718459, win 27960, options [mss 1410,sackOK,TS val 1178536026 ecr 604364,nop,wscale 8], length 0 22:57:23.042305 IP (tos 0x0, ttl 64, id 55351, offset 0, flags [DF], proto TCP (6), length 52) 192.168.3.212.46098 > 87.250.250.242.80: Flags [.], cksum 0x1790 (incorrect -> 0xaa43), seq 1, ack 1, win 683, options [nop,nop,TS val 604366 ecr 1178536026], length 0 root@bpi-iot-ros-ai:/home/pi# curl http://127.0.0.1:101/ 1>/dev/null 2>/dev/null 22:58:09.097550 IP 192.168.3.213.33688 > 87.250.250.242.80: Flags [S], seq 3175177562, win 43690, options [mss 65495,sackOK,TS val 608971 ecr 0,nop,wscale 6], length 0 22:58:09.097550 IP (tos 0x0, ttl 64, id 6033, offset 0, flags [DF], proto TCP (6), length 60) 192.168.3.213.33688 > 87.250.250.242.80: Flags [S], cksum 0x1799 (incorrect -> 0xa26f), seq 3175177562, win 43690, options [mss 65495,sackOK,TS val 608971 ecr 0,nop,wscale 6], length 0 22:58:09.114607 IP (tos 0x0, ttl 47, id 12432, offset 0, flags [none], proto TCP (6), length 60) 87.250.250.242.80 > 192.168.3.213.33688: Flags [S.], cksum 0x376a (correct), seq 1604868565, ack 3175177563, win 27960, options [mss 1410,sackOK,TS val 1524338273 ecr 608971,nop,wscale 8], length 0 22:58:09.115193 IP (tos 0x0, ttl 64, id 6034, offset 0, flags [DF], proto TCP (6), length 52) 192.168.3.213.33688 > 87.250.250.242.80: Flags [.], cksum 0x1791 (incorrect -> 0xd090), seq 1, ack 1, win 683, options [nop,nop,TS val 608973 ecr 1524338273], length 0 Можно сделать без коннтрэка на базе tcpproxy с возможностью задавать outside ip, но это будет userland 1 час назад, vop сказал: Ну для этого рулезы есть. ip rule Довольно глупо. Плодить 253 таблицы только ради разных ip src, при этом всё равно пользоваться conntrack-ом Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted June 12, 2018 6 часов назад, Ivan_83 сказал: Мало, ещё рдр/фвд нужен чтобы в правильный нехтхоп выплюнуть. Первый пост прочитайте внимательно. Речь не про то, что надо слать на разные некстхопы, а про то что слать с разных сорсов. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted June 13, 2018 Тогда и правда пары натов (бинат) достаточно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
tranger Posted June 13, 2018 9 часов назад, s.lobanov сказал: На базе conntrack/nat root@bpi-iot-ros-ai:/home/pi# ifconfig eth0:1 192.168.3.212/24 root@bpi-iot-ros-ai:/home/pi# ifconfig eth0:2 192.168.3.213/24 sysctl net.ipv4.ip_forward=1 sysctl net.ipv4.conf.all.route_localnet=1 sysctl net.ipv4.conf.eth0.route_localnet=1 iptables -t mangle -I OUTPUT -d 127.0.0.1 -p tcp --dport 100 -j MARK --set-mark 100 iptables -t nat -I OUTPUT -d 127.0.0.1 -p tcp --dport 100 -j DNAT --to 87.250.250.242:80 iptables -t nat -I POSTROUTING -m mark --mark 100 -j SNAT --to-source 192.168.3.212 iptables -t mangle -I OUTPUT -d 127.0.0.1 -p tcp --dport 101 -j MARK --set-mark 101 iptables -t nat -I OUTPUT -d 127.0.0.1 -p tcp --dport 101 -j DNAT --to 87.250.250.242:80 iptables -t nat -I POSTROUTING -m mark --mark 101 -j SNAT --to-source 192.168.3.213 Проверка: root@bpi-iot-ros-ai:/home/pi# tcpdump -i any -n -nn -s 0 "host 87.250.250.242" & root@bpi-iot-ros-ai:/home/pi# curl http://127.0.0.1:100/ 1>/dev/null 2>/dev/null 22:57:23.028390 IP 192.168.3.212.46098 > 87.250.250.242.80: Flags [S], seq 3802718458, win 43690, options [mss 65495,sackOK,TS val 604364 ecr 0,nop,wscale 6], length 0 22:57:23.028390 IP (tos 0x0, ttl 64, id 55350, offset 0, flags [DF], proto TCP (6), length 60) 192.168.3.212.46098 > 87.250.250.242.80: Flags [S], cksum 0x1798 (incorrect -> 0xdaed), seq 3802718458, win 43690, options [mss 65495,sackOK,TS val 604364 ecr 0,nop,wscale 6], length 0 22:57:23.041198 IP (tos 0x0, ttl 47, id 39480, offset 0, flags [none], proto TCP (6), length 60) 87.250.250.242.80 > 192.168.3.212.46098: Flags [S.], cksum 0x111d (correct), seq 2877491049, ack 3802718459, win 27960, options [mss 1410,sackOK,TS val 1178536026 ecr 604364,nop,wscale 8], length 0 22:57:23.042305 IP (tos 0x0, ttl 64, id 55351, offset 0, flags [DF], proto TCP (6), length 52) 192.168.3.212.46098 > 87.250.250.242.80: Flags [.], cksum 0x1790 (incorrect -> 0xaa43), seq 1, ack 1, win 683, options [nop,nop,TS val 604366 ecr 1178536026], length 0 root@bpi-iot-ros-ai:/home/pi# curl http://127.0.0.1:101/ 1>/dev/null 2>/dev/null 22:58:09.097550 IP 192.168.3.213.33688 > 87.250.250.242.80: Flags [S], seq 3175177562, win 43690, options [mss 65495,sackOK,TS val 608971 ecr 0,nop,wscale 6], length 0 22:58:09.097550 IP (tos 0x0, ttl 64, id 6033, offset 0, flags [DF], proto TCP (6), length 60) 192.168.3.213.33688 > 87.250.250.242.80: Flags [S], cksum 0x1799 (incorrect -> 0xa26f), seq 3175177562, win 43690, options [mss 65495,sackOK,TS val 608971 ecr 0,nop,wscale 6], length 0 22:58:09.114607 IP (tos 0x0, ttl 47, id 12432, offset 0, flags [none], proto TCP (6), length 60) 87.250.250.242.80 > 192.168.3.213.33688: Flags [S.], cksum 0x376a (correct), seq 1604868565, ack 3175177563, win 27960, options [mss 1410,sackOK,TS val 1524338273 ecr 608971,nop,wscale 8], length 0 22:58:09.115193 IP (tos 0x0, ttl 64, id 6034, offset 0, flags [DF], proto TCP (6), length 52) 192.168.3.213.33688 > 87.250.250.242.80: Flags [.], cksum 0x1791 (incorrect -> 0xd090), seq 1, ack 1, win 683, options [nop,nop,TS val 608973 ecr 1524338273], length 0 Можно сделать без коннтрэка на базе tcpproxy с возможностью задавать outside ip, но это будет userland Довольно глупо. Плодить 253 таблицы только ради разных ip src, при этом всё равно пользоваться conntrack-ом Спасибо большое, всё работает. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
tokra Posted June 21, 2018 @vop Цитата root@bpi-iot-ros-ai:/home/pi# ifconfig eth0:1 192.168.3.212/24 root@bpi-iot-ros-ai:/home/pi# ifconfig eth0:2 192.168.3.213/24 Зачем вы так делаете в линуксах в 2018 году? ^^^ Это был, больше, риторический вопрос Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted June 21, 2018 4 hours ago, tokra said: @vop Зачем вы так делаете в линуксах в 2018 году? ^^^ Это был, больше, риторический вопрос Все хорошо, но зачем вы чужую цитату подставили под мое имя? Зачем вы тек делаете? В 2018 году? И это НЕ риторический вопрос. :) :) :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted June 21, 2018 11 часов назад, tokra сказал: @vop Зачем вы так делаете в линуксах в 2018 году? ^^^ Это был, больше, риторический вопрос Я пользуюсь ifconfig-ом лишь по одной причине - вывод ifconfig (на просмотр) в миллион раз удобнее ввода нескольких команд (ip a , ip l, ip -6 a) Относительно конфигурации вообщем-то всё равно (через ifconfig или через ip a). ну и вообще это оффтоп, написал создание алиасов лишь ради того, чтобы показать где эти ip-адреса висят Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted June 21, 2018 45 минут назад, s.lobanov сказал: Я пользуюсь ifconfig-ом лишь по одной причине - вывод ifconfig (на просмотр) в миллион раз удобнее ввода нескольких команд (ip a , ip l, ip -6 a) +1, по мне, вывод более информативен, ну или скажем так привычен. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...