Перейти к содержимому
Калькуляторы

iptables редирект

Добрый день. Стоит Centos 7. Есть интерфейс eth0 с 253 белыми IP адресами: 1.1.1.21.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

и т.д.

Подскажите как это реализовать. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Лаба, что ли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2 часа назад, zhenya` сказал:

Snat + dnat?

Мало, ещё рдр/фвд нужен чтобы в правильный нехтхоп выплюнуть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

3 hours ago, Ivan_83 said:

Мало, ещё рдр/фвд нужен чтобы в правильный нехтхоп выплюнуть.

Ну для этого рулезы есть. ip rule

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

На базе 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-ом

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

6 часов назад, Ivan_83 сказал:

Мало, ещё рдр/фвд нужен чтобы в правильный нехтхоп выплюнуть.

Первый пост прочитайте внимательно. Речь не про то, что надо слать на разные некстхопы, а про то что слать с разных сорсов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тогда и правда пары натов (бинат) достаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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-ом

 

Спасибо большое, всё работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@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 году?

 

^^^ Это был, больше, риторический вопрос

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 hours ago, tokra said:

@vop 

Зачем вы так делаете в линуксах в 2018 году?

 

^^^ Это был, больше, риторический вопрос

Все хорошо, но зачем вы чужую цитату подставили под мое имя? Зачем вы тек делаете? В 2018 году? И это НЕ риторический вопрос.

 

:) :) :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

11 часов назад, tokra сказал:

@vop 

Зачем вы так делаете в линуксах в 2018 году?

 

^^^ Это был, больше, риторический вопрос

Я пользуюсь ifconfig-ом лишь по одной причине - вывод ifconfig (на просмотр) в миллион раз удобнее ввода нескольких команд (ip a , ip l, ip -6 a)

 

Относительно конфигурации вообщем-то всё равно (через ifconfig или через ip a). ну и вообще это оффтоп, написал создание алиасов лишь ради того, чтобы показать где эти ip-адреса висят

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

45 минут назад, s.lobanov сказал:

Я пользуюсь ifconfig-ом лишь по одной причине - вывод ifconfig (на просмотр) в миллион раз удобнее ввода нескольких команд (ip a , ip l, ip -6 a)

+1, по мне, вывод более информативен, ну или скажем так привычен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.