Jump to content
Калькуляторы

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

и т.д.

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

Share this post


Link to post
Share on other sites

 

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

4 hours ago, tokra said:

@vop 

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

 

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

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

 

:) :) :)

 

Share this post


Link to post
Share on other sites

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

@vop 

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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.