Премини към съдържанието
synner

Q: Настройка на iptables + iproute2, маршрутизация чрез маркиране.

Препоръчан отговор


Здравейте, манияци

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

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

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

Пробвах:

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.
Ако добавя и

iptables -t nat -A POSTROUTING -d 77.77.78.78 -p tcp --dport 3333 -j MASQUERADE


номерът става, но тогава в логовете на B не виждам истинския адрес на клиента, което ми е проблем.

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


На сървър A:

ip tunnel add tunnel0 mode ipip remote 77.77.78.78 local 77.77.77.77 ttl 32
ip link set tunnel0 up
ip addr add 192.168.254.1/30 dev tunnel0

На сървър B:

ip tunnel add tunnel0 mode ipip remote 77.77.77.77 local 77.77.78.78 ttl 32
ip link set tunnel0 up
ip addr add 192.168.254.2/30 dev tunnel0

ICMP ping минава.

Сега почват iptables + iproute2 магиите.
На сървър B:

iptables -t mangle -A PREROUTING -i tunnel0 -p tcp --dport 3333 -j MARK --set-xmark 0x1/0xffffffff
echo 1 rt_tunnel0 >> /etc/iproute2/rt_tables
ip route add default via 192.168.254.1 dev tunnel0 table rt_tunnel0
ip rule add from all fwmark 1 table rt_tunnel0

На сървър A:

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-а ли?

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

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

преди 17 часа, synner написа:

iptables -t mangle -A PREROUTING -i tunnel0 -p tcp --dport 3333 -j MARK --set-xmark 0x1/0xffffffff

трябва да маркираш изходящия поток от порта 3333 с OUTPUT, не входящия, и тогава да се рутира от таблицата rt_tunnel0 към тунела. В случая, изходящия поток от порта се рутира от main таблицата, защото не е маркиран и няма mapping между маркирания поток и таблицата rt_tunnel0, затова не виждаш tcp ack на tunnel0. На сървър А добави маскарадинг, квото дойде от тунела да го натва.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

В крайна сметка махнах iptables rules от сървър B и го направих само с iproute2:

root@debian ~ # echo 250 rt_tunnel0 >> /etc/iproute2/rt_tables
root@debian ~ # ip route add default via 192.168.254.1 dev tunnel0 src 192.168.254.2 table rt_tunnel0
root@debian ~ # ip route add 192.168.254.0/30 dev tunnel0 src 192.168.254.2 table rt_tunnel0
root@debian ~ # ip rule add iif tunnel0 table rt_tunnel0
root@debian ~ # ip rule add from 192.168.254.2 table rt_tunnel0

И добавих един SNAT на сървър A.

Сега въпросът ми е как да напратя тези настройки да се запазват при reboot?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 19 часа, synner написа:

В крайна сметка махнах iptables rules от сървър B и го направих само с iproute2:


root@debian ~ # echo 250 rt_tunnel0 >> /etc/iproute2/rt_tables
root@debian ~ # ip route add default via 192.168.254.1 dev tunnel0 src 192.168.254.2 table rt_tunnel0
root@debian ~ # ip route add 192.168.254.0/30 dev tunnel0 src 192.168.254.2 table rt_tunnel0
root@debian ~ # ip rule add iif tunnel0 table rt_tunnel0
root@debian ~ # ip rule add from 192.168.254.2 table rt_tunnel0

И добавих един SNAT на сървър A.

Сега въпросът ми е как да напратя тези настройки да се запазват при reboot?

създаваш изпълним скрипт с тях и го поставяш в /etc/network/if-up.d

 

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Благодаря сърдечно, темата е за затваряне! :)


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.