LINUX.ORG.RU
ФорумAdmin

Не работает NAT


0

0

Хелп, мистика. В айпистолах прописан маскарадинг на 2-х интерфейсах и перенаправление на прокси. Ни то ни другое не работает, в tcpdump видны пакеты с внутренними адресами.

Вот собственно не работающие правила:

iptables -t nat -A POSTROUTING -o $OUT1 -j MASQUERADE  
iptables -t nat -A POSTROUTING -o $OUT2 -j MASQUERADE
 
iptables -t nat -A PREROUTING -s 192.168.1.32/27 -p TCP --dport 80 -j REDIRECT --to-ports 8800  
iptables -t nat -A PREROUTING -s 192.168.1.0/27 -p TCP --dport 80 -j REDIRECT --to-ports 8800
Вот весь конфиг iptables:
#!/bin/sh 
IN="eth1" 
#OUT="wimax0" 
OUT1="ppp0" 
OUT2="ppp1" 
OUT3="eth0" 
 
for i in "-F" "-X" "-Z" 
do 
    for j in "nat" "mangle" "filter" 
    do 
        iptables -t $j $i 
    done 
done 
 
iptables -t nat -A POSTROUTING -o $OUT1 -j MASQUERADE  
iptables -t nat -A POSTROUTING -o $OUT2 -j MASQUERADE  
iptables -t nat -A POSTROUTING -o $OUT3 -j SNAT --to-source 111.222.333.16  
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 
 
# настраиваем маркировку исходящих соединений 
iptables -t mangle -N NEW_OUT_CONN 
iptables -t mangle -N FILTER_OUT_CONN 
 
iptables -t mangle -A PREROUTING -m state --state NEW,RELATED \ 
    -s 192.168.1.0/27 -j FILTER_OUT_CONN 
iptables -t mangle -A PREROUTING -m state --state NEW,RELATED \ 
    -s 192.168.1.32/27 -j FILTER_OUT_CONN 
iptables -t mangle -A OUTPUT -m state --state NEW,RELATED \ 
    -m owner --uid-owner proxy -j FILTER_OUT_CONN 
 
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark 
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark 
 
iptables -t mangle -A FILTER_OUT_CONN -d 192.168.1.0/27 -j RETURN 
iptables -t mangle -A FILTER_OUT_CONN -d 192.168.1.32/27 -j RETURN 
iptables -t mangle -A FILTER_OUT_CONN -j NEW_OUT_CONN 
 
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 1 
iptables -t mangle -A NEW_OUT_CONN -m statistic --mode nth --every 2 -j RETURN 
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2 
 
iptables -t nat -A PREROUTING -s 192.168.1.32/27 -p TCP --dport 80 -j REDIRECT --to-ports 8800  
iptables -t nat -A PREROUTING -s 192.168.1.0/27 -p TCP --dport 80 -j REDIRECT --to-ports 8800  
 
iptables -A FORWARD -p UDP --dport 67:68 --sport 67:68 -j REJECT 
iptables -A FORWARD -p TCP --dport 67:68 --sport 67:68 -j REJECT

Если вручную настроить прокси в браузере, то всё работает.

Lonli-Lokli ★★
() автор топика

1. При использовании policy routing'а _обязательно_ отключаем фильтрацию по статическим таблицам.
sysctl net.ipv4.conf.all.rp_filter=0

2. Для балансировки соединений также нужны ip rule и ip route. Они есть?

iptables -t mangle -A PREROUTING -m state --state NEW,RELATED -s 192.168.1.0/27 -j FILTER_OUT_CONN

iptables -t mangle -A PREROUTING -m state --state NEW,RELATED -s 192.168.1.32/27 -j FILTER_OUT_CONN



O_o WTF???
В FORWARD это нужно пихать, блин.

iptables -t nat -A PREROUTING -s 192.168.1.32/27 -p TCP --dport 80 -j REDIRECT --to-ports 8800


Не вижу -i eth1.

iptables -t nat -A POSTROUTING -o $OUT1 -j MASQUERADE

iptables -t nat -A POSTROUTING -o $OUT2 -j MASQUERADE



Здесь все идеально. Не работает что-то другое.

nnz ★★★★
()
Ответ на: комментарий от nnz

1. На rp_filter в самом начале наступил уже)

$ cat /proc/sys/net/ipv4/conf/all/rp_filter
0
$ cat /proc/sys/net/ipv4/conf/default/rp_filter
0
2. ip route и ip rule настроены, при прописанном в браузере адресе прокси странички тянутся с двух модемов поочерёдно.

Завтра попробую подправить.

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от nnz

Заменил PREROUTING на FORWARD, заработал прозрачный проксик. Пинги остались в том же виде, почему-то не видны исходящие пакеты.

root@gateway# tcpdump -i ppp1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ppp1, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
10:35:18.226219 IP ya.ru > 192.168.1.58: ICMP echo reply, id 3843, seq 101, length 64
10:35:20.242242 IP ya.ru > 192.168.1.58: ICMP echo reply, id 3843, seq 103, length 64
10:35:22.258283 IP ya.ru > 192.168.1.58: ICMP echo reply, id 3843, seq 105, length 64

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от nnz

# iptables-save
# Generated by iptables-save v1.4.2 on Tue Dec 29 13:52:53 2009
*mangle
:PREROUTING ACCEPT [686317:357404962]
:INPUT ACCEPT [572006:252660295]
:FORWARD ACCEPT [112007:104460945]
:OUTPUT ACCEPT [490532:47633760]
:POSTROUTING ACCEPT [602539:152094705]
:FILTER_OUT_CONN - [0:0]
:NEW_OUT_CONN - [0:0]
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -s 192.168.1.0/27 -m state --state NEW,RELATED -j FILTER_OUT_CONN
-A FORWARD -s 192.168.1.32/27 -m state --state NEW,RELATED -j FILTER_OUT_CONN
-A FORWARD -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A OUTPUT -m state --state NEW,RELATED -m owner --uid-owner proxy -j FILTER_OUT_CONN
-A OUTPUT -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A FILTER_OUT_CONN -d 192.168.1.0/27 -j RETURN
-A FILTER_OUT_CONN -d 192.168.1.32/27 -j RETURN
-A FILTER_OUT_CONN -j NEW_OUT_CONN
-A NEW_OUT_CONN -j CONNMARK --set-xmark 0x1/0xffffffff
-A NEW_OUT_CONN -m statistic --mode nth --every 2 -j RETURN
-A NEW_OUT_CONN -j CONNMARK --set-xmark 0x2/0xffffffff
COMMIT
# Completed on Tue Dec 29 13:52:53 2009
# Generated by iptables-save v1.4.2 on Tue Dec 29 13:52:53 2009
*nat
:PREROUTING ACCEPT [51884:3703146]
:POSTROUTING ACCEPT [52996:3650881]
:OUTPUT ACCEPT [56262:3924613]
-A PREROUTING -s 192.168.1.32/27 -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8800
-A PREROUTING -s 192.168.1.0/27 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8800
-A POSTROUTING -o ppp0 -j MASQUERADE
-A POSTROUTING -o ppp1 -j MASQUERADE
-A POSTROUTING -o eth0 -j SNAT --to-source 111.222.333.16
COMMIT
# Completed on Tue Dec 29 13:52:53 2009
# Generated by iptables-save v1.4.2 on Tue Dec 29 13:52:53 2009
*filter
:INPUT ACCEPT [572006:252660295]
:FORWARD ACCEPT [112007:104460945]
:OUTPUT ACCEPT [490534:47634024]
-A FORWARD -p udp -m udp --sport 67:68 --dport 67:68 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -p tcp -m tcp --sport 67:68 --dport 67:68 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Tue Dec 29 13:52:53 2009

По моему странно, что у этих цепочек пустые счётчики:
:FILTER_OUT_CONN - [0:0]
:NEW_OUT_CONN - [0:0]

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от Lonli-Lokli

>По моему странно, что у этих цепочек пустые счётчики:

Не, здесь все нормально. Для всех юзерских цепочек они всегда 0:0, потому как считают количество пакетов/байт, прошедших по дефолтному действию, а у пользовательских цепочек этого действия нет как класса (прочерки стоят).

-A OUTPUT -m state --state NEW,RELATED -m owner --uid-owner proxy -j FILTER_OUT_CONN

Ну и чего ты удивляешься, что пинги через eth0 идут? Балансировка исходящих соединий с самого сервака работает только для прокси.

anonymous
()
Ответ на: комментарий от anonymous

Дык выше то ещё вот это есть:
-A FORWARD -s 192.168.1.0/27 -m state --state NEW,RELATED -j FILTER_OUT_CONN
-A FORWARD -s 192.168.1.32/27 -m state --state NEW,RELATED -j FILTER_OUT_CONN

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от Lonli-Lokli

FORWARD — для _транзитных_ соединений. Т.е. тех, которые идут, скажем из локалки.

OUTPUT — для исходящих локальных. Т.е. тех, которые идут от процессов твоего сервака. Из этих пакетов у тебя балансировка только для юзера proxy. Естественно, что для пинга от рута балансировки не будет.

nnz ★★★★
()
Ответ на: комментарий от nnz

Пинг не от рута на шлюзе, а с ноута за шлюзом. Извиняюсь, если что сразу неясно объяснил. То что с самого шлюза трафик через eth0 идёт, так это так и задумывалось изначально. Проблема в том, что трафик с машин за шлюзом либо не маскарадится (tcpdump выше), если
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
либо идёт через eth0 же, если
iptables -t mangle -A FORWARD -j CONNMARK --restore-mark

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от Lonli-Lokli

Чтоб я хоть что-то понял :/

Попробуй сравнить значения счетчиков пакетов и байт (iptables -vnL) в обоих случаях после прогона некоторого количества трафика. Особенно интересен счетчик для restore-mark.

nnz ★★★★
()
Ответ на: комментарий от Lonli-Lokli

>С наступающим!

Спасибо, тебя тоже! :)

nnz ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.