tranger Posted June 12, 2018 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
Ivan_83 Posted June 12, 2018 Posted June 12, 2018 2 часа назад, zhenya` сказал: Snat + dnat? Мало, ещё рдр/фвд нужен чтобы в правильный нехтхоп выплюнуть. Вставить ник Quote
vop Posted June 12, 2018 Posted June 12, 2018 3 hours ago, Ivan_83 said: Мало, ещё рдр/фвд нужен чтобы в правильный нехтхоп выплюнуть. Ну для этого рулезы есть. ip rule Вставить ник Quote
s.lobanov Posted June 12, 2018 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
s.lobanov Posted June 12, 2018 Posted June 12, 2018 6 часов назад, Ivan_83 сказал: Мало, ещё рдр/фвд нужен чтобы в правильный нехтхоп выплюнуть. Первый пост прочитайте внимательно. Речь не про то, что надо слать на разные некстхопы, а про то что слать с разных сорсов. Вставить ник Quote
Ivan_83 Posted June 13, 2018 Posted June 13, 2018 Тогда и правда пары натов (бинат) достаточно. Вставить ник Quote
tranger Posted June 13, 2018 Author 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
tokra Posted June 21, 2018 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
vop Posted June 21, 2018 Posted June 21, 2018 4 hours ago, tokra said: @vop Зачем вы так делаете в линуксах в 2018 году? ^^^ Это был, больше, риторический вопрос Все хорошо, но зачем вы чужую цитату подставили под мое имя? Зачем вы тек делаете? В 2018 году? И это НЕ риторический вопрос. :) :) :) Вставить ник Quote
s.lobanov Posted June 21, 2018 Posted June 21, 2018 11 часов назад, tokra сказал: @vop Зачем вы так делаете в линуксах в 2018 году? ^^^ Это был, больше, риторический вопрос Я пользуюсь ifconfig-ом лишь по одной причине - вывод ifconfig (на просмотр) в миллион раз удобнее ввода нескольких команд (ip a , ip l, ip -6 a) Относительно конфигурации вообщем-то всё равно (через ifconfig или через ip a). ну и вообще это оффтоп, написал создание алиасов лишь ради того, чтобы показать где эти ip-адреса висят Вставить ник Quote
pppoetest Posted June 21, 2018 Posted June 21, 2018 45 минут назад, s.lobanov сказал: Я пользуюсь ifconfig-ом лишь по одной причине - вывод ifconfig (на просмотр) в миллион раз удобнее ввода нескольких команд (ip a , ip l, ip -6 a) +1, по мне, вывод более информативен, ну или скажем так привычен. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.