Originally Posted by
Oleg
Есть такая target - NETMAP, она входит в прошивку. Только вот она правлена АСУСом и я не уверен, буде оно работать или нет.
Спасибо за совет, попробовал этот NETMAP. Результат почти такой же как c DNAT/SNAT-ом - судя по документации и различным tutorial-ам это то что мне нужно, но в нашей коробочке оно не работает.
Выглядит это как полностью отсутствующий ответ даже от рутера когда выполняю tracert на интересующий меня хост.
Вот такие правила я соорудил (даже исключил диапазон, для начала пытаюсь хотя бы для одного адреса подстановку сделать, с полным диапазоном 10.0.0.0/8 результат такой же):
Code:
iptables -t nat -I PREROUTING -d 2.4.43.75/32 -j NETMAP --to 10.4.43.75/32
iptables -t nat -I POSTROUTING -s 10.4.43.75/32 -j NETMAP --to 2.4.43.75/32
Результат (со стационарного компа):
Code:
P:\>tracert -d 2.4.43.75
Tracing route to 2.4.43.75 over a maximum of 30 hops
1 * * * Request timed out.
2 ^C
C SNAT/DNAT один адрес работает:
Code:
iptables -t nat -I PREROUTING -d 2.4.43.75/32 -j DNAT --to 10.4.43.75
iptables -t nat -I POSTROUTING -s 10.4.43.75/32 -j SNAT --to 2.4.43.75
(10.0.17.66 - WL-500gP)
Code:
P:\>tracert -d 2.4.43.75
Tracing route to 2.4.43.75 over a maximum of 30 hops
1 <1 ms <1 ms <1 ms 10.0.17.66
2 1 ms 1 ms 1 ms 2.4.43.75
3 1 ms 1 ms 1 ms 2.4.43.75
4 3 ms 3 ms 4 ms 2.4.43.75
5 1 ms 2 ms 2 ms 2.4.43.75
Trace complete.
Судя по тому как ASUS-овцы его используют, подпилили реализацию этого NETMAP-а серьезно (мапить в тупую разные по размеру диапазоны друг в друга вообщем то невозможно, наверно там какая то дополнительная логика есть):
Code:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
NETMAP udp -- anywhere 192.168.30.54 udp spt:6112 10.0.17.64/28
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
NETMAP udp -- 10.0.17.64/28 anywhere udp dpt:6112 192.168.30.54/32
(192.168.30.54 - адрес на wan порту, 10.0.17.64/28 в lan-е, интересующие меня 10.0.0.0/8 доступны через gateway 192.168.24.1).
У меня возникло 3 следующих вопроса:
1. Много где пишут что NETMAP доступен только в ядрах 2.5-2.6, у нас как я понимаю 2.4. Если ли информация о том, есть ли где то в глубине ядра, правильный таки NETMAP?
2. Олег, не могли бы вы показать где в исходниках потрудились асусовцы, может я смогу придумать какой нибудь workaround не требующий перекомпиляции...
3. Некоторые tutorial-ы предлагают NETMAP размещать в mangle таблице (другие наоборот запрещают это), в нашей коробочке добавляесть только в nat таблицу. Кто прав?
Или я сделал какую то простую ошибку?
ps Нашел интересную ссылку: http://www.linuxkernel.ru/?q=node/222 - тут вроде требуется пересобрать только iptables, теоретически нужное мне преобразование я мог бы оформить в виде кода на c++, но вот как и что нужно собирать/регистрировать/подкладывать я пока плохо понимаю. Может какой нибудь гуру в Linux-е подсказать как для нашей коробочки будут выглядеть нужные команды сборки?