pelmen писал(а): ↑05.11.2009 08:59
Подозреваю, что для этого нужно два правила iptables делать. Одно для транзитных (mangle prerouting) второе для локальных (как?)
Ну для локальных # iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 0x2
Я вот, кстати почитал, понял, наконец. Если вы ещё не нашли, то ID таблицы в iproute2 не более чем её номер, на сколько я понял, он ни на что не влияет. Вы можете добавлять правила в таблицу по имени или по номеру. А вот приоритеты уже выставляются каждым правилам (rule) с помощью приставочки prio. Например, # ip rule from 192.168.0.1 table 200 prio 50
В итоге видим:$ ip ru l
0: from all lookup local
50: from 192.168.0.1 lookup eth2-out
32766: from all lookup main
32767: from all lookup default
Таблица default стоит самая последняя в приоритетах, она пустая (можете убедиться # ip ro l table default), но не вижу большой необходимости её использовать. Хотите? -- используйте.
Ну а я всё мучаю свой вопрос. Пока что не ясно, почему если я добавлю правило :
# ip ro add default via gw2_ip dev eth2 table eth2-out
# ip ru add from IP_client table eth2-out
Пакеты удачно ходят от клиента и обратно. Но если я буду метить пакеты:
# iptables -t mangle -A PREROUTING -s $LAN -j MARK --set-mark 10
# iptables -t nat -A POSTROUTING -o eth2 -m mark --mark 10 -j SNAT --to-source $MYIP
то, они ходят от клиента в интернет а на обратном пути осядают на сервере. Лоигчно было бы предположить, что рас пакеты идущие оратно уже без марки, то они не проходят таблицу маршрутизации в которую кидает правило ip rule fwmark. Окей, делаем:
# iptables -t mangle -A PREROUTING -p tcp --sport 80 -j MARK --set-mark 10
пакеты всё равно будут осядать на серваке.
Подкинте ещё идеи, пожалуйста, где грабли?