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

Policy routing и NAT в Linux

Добрый день,

 

столкнулся с такой проблемой:

Есть сервер АСР, с адресом 192.168.1.2, который производит подсчет трафика и контроль доступа.

 

Есть маршрутизатор (Linux 2.6.29) с тремя интерфейсами,

eth0 - x.x.x.x - подключен интернет

eth1 - 192.168.1.1 - подключена система учета трафика (АСР)

eth2 - 10.0.0.1/8 - подключены клиенты

 

Требуется трафик между клиентами и интернетом пропустить через АСР.

 

Настройки:

iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -i eth2 -j MARK --set-mark 200 #Трафик от клиента в инет

iptables -t mangle -A PREROUTING -d 10.0.0.0/8 -i eth0 -j MARK --set-mark 100 #Трафик из инета к клиенту

 

ip route add default via 192.168.1.2 table 200

 

ip rule add fwmark 100 lookup 200

ip rule add fwmark 200 lookup 200

 

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to x.x.x.x

 

Проблема в том - что нат не работает. При снятии дампа с внешнего интерфейса маршрутника я вижу локальный адрес 10.0.0.2.

Если убрать fwmark - нат работает, но трафик не проходит через АСР.

Если запустить пинг с клиента в инет (1 пакет) и посмотреть счетчики пакетов, прошедших через цепочки, то видно, что через таблицы filter и mangle прошло 2 пакета, а через nat - только 1.

Можно ли что нибудь сделать в таком решении?

 

Share this post


Link to post
Share on other sites

Натить лучше также по марке

iptables -t nat -A POSTROUTING -m mark --mark XXX -j SNAT --to-source x.x.x.x

 

и ещё надо выключить rp_filter

for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo '0' >$f; done

Edited by Forst

Share this post


Link to post
Share on other sites

rp_filter выключен, нат по метке ничего не дает, т.к. пакет до цепочки Nat Postrouting вообще не доходит....

Share this post


Link to post
Share on other sites

Где-то рубится

 

echo 1 >/proc/sys/net/ipv4/ip_forward

 

iptables -t mangle -I FORWARD -j ACCEPT

iptables -I FORWARD -j ACCEPT

iptables -t mangle -I POSTROUTING -j ACCEPT

 

Share this post


Link to post
Share on other sites

iptables чистый, за исключением тех настроек, которые я привел.

форвард работает, т.к. пакет до получателя в интернете доходит, но с внутренним адресом, а не внешним.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this