Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: synner в Oct 07, 2016, 18:35



Титла: Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.
Публикувано от: synner в Oct 07, 2016, 18:35
Здравейте, манияци

(реалните 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-а ли?

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


Титла: Re: Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.
Публикувано от: BRADATA в Oct 07, 2016, 20:45
http://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming/23345


Титла: Re: Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.
Публикувано от: synner в Oct 08, 2016, 12:08
Благодаря, Брада

Взе че проработи с:
Код
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.
Сега ще тествам всякакви сценарии с различни връзки и мисля, че темата върви към затваряне. ;)


Титла: Re: Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.
Публикувано от: synner в Oct 09, 2016, 01:27
А как да направя така, че тази конфигурация да запазва след reboot?


Титла: Re: Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.
Публикувано от: BRADATA в Oct 09, 2016, 08:05
Каква е дистрибуцията?


Титла: Re: Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.
Публикувано от: synner в Oct 09, 2016, 14:50
Код
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


Титла: Re: Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.
Публикувано от: BRADATA в Oct 09, 2016, 20:59
Не съм почитател на дебиан.
погледни тук http://superuser.com/questions/917735/which-configuration-files-affect-the-routing-table-of-a-debian-system и тук https://wiki.debian.org/NetworkConfiguration


Титла: Re: Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.
Публикувано от: edmon в Oct 16, 2016, 20:20
А как да направя така, че тази конфигурация да запазва след reboot?

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


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

iptables-restore < /etc/iptables.save


Титла: Re: Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.
Публикувано от: synner в Oct 21, 2016, 19:01
Темата е за затваряне!
Благодаря сърдечно за съветите и напътствията! :)