Автор Тема: Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.  (Прочетена 3692 пъти)

synner

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
Здравейте, манияци

(реалните IP адреси и портове са сменени за илюстрацията).

Имам Debian Jessie сървър A с публичен адрес 77.77.77.77.
Имам Debian Jessie сървър B с публичен адрес 77.77.78.78 (различен subnet).

Сървър B слуша на TCP 3333.
Искам връзки към A:13333 да бъдат пренасочвани към B:3333

Пробвах:
Код
GeSHi (Bash):
  1. iptables -t nat -I PREROUTING 1 -i eth0 -p tcp --dport 13333 -j DNAT --to-destination 77.77.78.78:3333
Но не работи, защото когато B отговори на клиента, клиентът не знае за пренасочването от A->B и отговаря с TCP RST.
Ако добавя и
Код
GeSHi (Bash):
  1. iptables -t nat -A POSTROUTING -d 77.77.78.78 -p tcp --dport 3333 -j MASQUERADE
номерът става, но тогава в логовете на B не виждам истинския адрес на клиента, което ми е проблем.

За това решавам да правя рутиране с отделна таблица и маркиране на пакети/връзки.
Понеже A и B са в различни мрежи, решавам да вдигна IP-IP тунел:


На сървър A:
Код
GeSHi (Bash):
  1. ip tunnel add tunnel0 mode ipip remote 77.77.78.78 local 77.77.77.77 ttl 32
  2. ip link set tunnel0 up
  3. ip addr add 192.168.254.1/30 dev tunnel0

На сървър B:
Код
GeSHi (Bash):
  1. ip tunnel add tunnel0 mode ipip remote 77.77.77.77 local 77.77.78.78 ttl 32
  2. ip link set tunnel0 up
  3. ip addr add 192.168.254.2/30 dev tunnel0
ICMP ping минава.

Сега почват iptables + iproute2 магиите.
На сървър B:
Код
GeSHi (Bash):
  1. iptables -t mangle -A PREROUTING -i tunnel0 -p tcp --dport 3333 -j MARK --set-xmark 0x1/0xffffffff
  2. echo 1 rt_tunnel0 >> /etc/iproute2/rt_tables
  3. ip route add default via 192.168.254.1 dev tunnel0 table rt_tunnel0
  4. ip rule add from all fwmark 1 table rt_tunnel0

На сървър A:
Код
GeSHi (Bash):
  1. iptables -t nat -I PREROUTING 1 -i eth0 -p tcp --dport 13333 -j DNAT --to-destination 192.168.254.2:3333
Сега като пусна един "tcpdump -i tunnel0" на server B, виждам, че пристигат TCP SYN по тунела, ма сървър B не е*ава да върне TCP ACK.

Къде бъркам? Нещо по return path-а ли?

Благодаря предварително!
Активен

Прост народ - слаба държава!

BRADATA

  • Напреднали
  • *****
  • Публикации: 833
  • Distribution: Slackware/Mint/CentOS
  • Window Manager: console/KDE/LXDE
    • Профил
    • WWW
Активен

synner

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
Благодаря, Брада

Взе че проработи с:
Код
GeSHi (Bash):
  1. root@debian ~ # echo 250 rt_tunnel0 >> /etc/iproute2/rt_tables
  2. root@debian ~ # ip route add default via 192.168.254.1 dev tunnel0 src 192.168.254.2 table rt_tunnel0
  3. root@debian ~ # ip route add 192.168.254.0/30 dev tunnel0 src 192.168.254.2 table rt_tunnel0
  4. root@debian ~ # ip rule add iif tunnel0 table rt_tunnel0
  5. root@debian ~ # ip rule add from 192.168.254.2 table rt_tunnel0
И добавих един iptables SNAT на сървър A за пакетите, които се връщат от сървър B.
Сега ще тествам всякакви сценарии с различни връзки и мисля, че темата върви към затваряне. ;)
« Последна редакция: Oct 09, 2016, 01:34 от synner »
Активен

Прост народ - слаба държава!

synner

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
А как да направя така, че тази конфигурация да запазва след reboot?
Активен

Прост народ - слаба държава!

BRADATA

  • Напреднали
  • *****
  • Публикации: 833
  • Distribution: Slackware/Mint/CentOS
  • Window Manager: console/KDE/LXDE
    • Профил
    • WWW
Каква е дистрибуцията?
Активен

synner

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
Код
GeSHi (Bash):
  1. root@debian ~ # lsb_release -a
  2. No LSB modules are available.
  3. Distributor ID: Debian
  4. Description:    Debian GNU/Linux 8.6 (jessie)
  5. Release:        8.6
  6. Codename:       jessie
Активен

Прост народ - слаба държава!

BRADATA

  • Напреднали
  • *****
  • Публикации: 833
  • Distribution: Slackware/Mint/CentOS
  • Window Manager: console/KDE/LXDE
    • Профил
    • WWW
Активен

edmon

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
А как да направя така, че тази конфигурация да запазва след reboot?

записваш правилата в файл iptables.save
iptables-save > /etc/iptables.save


и добави в файла /etc/rc.local

iptables-restore < /etc/iptables.save
Активен

synner

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
Темата е за затваряне!
Благодаря сърдечно за съветите и напътствията! :)
Активен

Прост народ - слаба държава!

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Някой използвал ли е пакета iproute2?
Настройка на програми
saturn_vk 15 4108 Последна публикация May 27, 2003, 20:33
от KNK
iproute2+tc
Хардуерни и софтуерни проблеми
x11r6 0 1307 Последна публикация Jun 10, 2003, 20:01
от x11r6
linux advanced routing with iproute2+tc
Преводи на документация
x11r6 23 10635 Последна публикация Nov 27, 2005, 18:34
от divak
Проблем с  iproute2 ?
Настройка на програми
zax 2 1523 Последна публикация Apr 10, 2005, 21:00
от zarhi
Iptables - iptables-restore: line 36 failed
Сървъри
sianbg 5 6430 Последна публикация Nov 26, 2013, 13:04
от petar258