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

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, по мне, вывод более информативен, ну или скажем так привычен.

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас