Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: dark_elf в Dec 11, 2012, 17:14



Титла: iptables не приема правило - bad argument
Публикувано от: dark_elf в Dec 11, 2012, 17:14
От няколко часа мъча един FW. Ето и реда които ми връща грешка:
Код:
iptables -t nat -A POSTROUTING -o eth1 -d ! 10.0.0.0/24  -j MASQUERADE

Грешката която връща:
Bad argument '10.0.0.0/24'

Ако махна удивителният (!) знак го приема, но така не минава и не разбирам защо!
Системата е Ubuntu server 12.04.1 - ядрото е 3.2.0-29-generic-pae


Титла: Re: iptables не приема правило - bad argument
Публикувано от: neter в Dec 11, 2012, 20:14
Първо, слагането на "!" след флага на опцията вече не е актуално, така че да не се учудваш, ако ти изкарва съобщение за това. Препоръчително е "!" да се слага преди флага на опцията. Т.е.
Цитат
iptables -A POSTROUTING -t nat -o eth0 ! -d 10.0.0.0/24 -j MASQUERADE

Второ, не знам откъде ги копираш тези редове, но имаш някакви странни интервали в тях. В реда, който си копирал тук, странният интервал е тук "24 -j". Там, където го изпълняваш, може да е точно преди "10.0.0.0/24" и затова да ти дава тази грешка. Колкото и странно да звучи, оправи си интервалите :)


Титла: Re: iptables не приема правило - bad argument
Публикувано от: ivanatora в Dec 12, 2012, 11:26
Позабравил съм iptables, но в POSTROUTING не беше ли безсмислено да се ползва -destination? Не беше ли PREROUTING -> -destination и POSTROUTING -> -source


Титла: Re: iptables не приема правило - bad argument
Публикувано от: dark_elf в Dec 12, 2012, 11:54
@neter, благодаря! Стана след като изместих (!) преди -d. Инъче няма проблем със интервалите. :)


Титла: Re: iptables не приема правило - bad argument
Публикувано от: neter в Dec 12, 2012, 20:11
Позабравил съм iptables, но в POSTROUTING не беше ли безсмислено да се ползва -destination?
Мда, позабравил си :) Всеки пакет във всеки един момент от преминаването си през iptables си има източник (source) и насоченост (destination), така че iptables ти предоставя възможност да описваш и двете във всяка една от своите таблици (filter, nat и mangle). Можеш да видиш и, че във всички таблици има както колона source, така и колона destination. Няма логика да се показват колони, съдържащи информация, която е непроменима или неприложима, нали? ;)
В случая, dark_elf иска да маскира всички пакети, освен тези, които са насочени към 10.0.0.0/24. Така машините, в частната мрежа зад този маршрутизатор, ще имат достъп до всички, освен до споменатата мрежа. По принцип е хубаво да се описва и source-а, но ако е нужно, не е забранено да не се опише (т.е., да действа за всички източници). Не се знае и защо dark_elf пуска достъп навсякъде, освен към описаната частна мрежа, но той сигурно си има причина.

Стана след като изместих (!) преди -d. Инъче няма проблем със интервалите. :)
Да, сега пробвах на едно Ubuntu 12.04 и се оказа, че там слагането на "!" след флага не само не е препоръчително, но вече е забранено. В Debian Stable все още са валидни и двата начина, като старият само е непрепоръчителен.
Но това не пречеше вчера да се дзверя като говедо каква е разликата между твоя ред и моя ред, който изписах ръчно под него в tilda, gedit и leafpad, докато не пробвах със замяна символ по символ. За съжаление някак магически (гледам, че не си редактирал поста си) редът от твоя пост на онова място вече не съдържа странния интервал, а два обикновени интервала, но пък аз си пазя вчерашния изглед на реда за тестове. Засега виждам, че редът запазва странния си интервал, ако бъде копиран само със селектиране (вместо "Копиране" от менюто на десния бутон) и поставен със среден бутон и то не навсякъде. Ако копираният ред се постави в chrome, leafpad, tilda и gedit, странният интервал се запазва, но ако редът се постави в lxterminal, се трансформира в два обикновени интервала. Някъде има някакъв бъг, но дали е при теб или при мен, дали е в браузъра или в програмите, където ефектът се запазва, или във функцията за копиране само със селектиране в LXDE, или някъде по-дълбоко в системата... Загадка, която, както се развива, едва ли ще успея да си изясня, но не пречи да пробвам :)


Титла: Re: iptables не приема правило - bad argument
Публикувано от: remotex в Dec 12, 2012, 20:34
Прав си neter
първият интервал след /24 е   т.е. код 160 (ако се не лъжа) вместо код 32 - различен м/у latin1/cp1251 напр. Обаче като гледам този документ си е правилен т.е. UTF-8 та прекодирането трябва да работи навсякъде т.е. ако lxterminal знае че му идва utf8 а трябва да го конвертира до.. каквото там е настроен да ползва (latin1/cp1251) то би трябвало да го преобразува в обикновен интервал с код 32... Докладвай за грешка на разработчиците (не знам дали има разлика като копираш нормално и/ли със среден бутон .. може пък в единия случай да няма или да си губи контекст ...па може и до ВМ да е)
Код
GeSHi (HTML):
  1. <div class="code"><pre>iptables -t nat -A POSTROUTING -o eth1 -d ! 10.0.0.0/24&nbsp; -j MASQUERADE<br></pre></div><br>

Да - Желатено е да се ползват обикновени итервали!
 Че да не се чуди после човек откъде му е дошло...


Титла: Re: iptables не приема правило - bad argument
Публикувано от: dejuren в Dec 12, 2012, 20:47
Имайте предвид обаче, че проблема може да възниква още на ниво "dark_elf копира командата във форума", а не в последствие "neter и другите копират командата от форума".


Титла: Re: iptables не приема правило - bad argument
Публикувано от: neter в Dec 12, 2012, 20:59
Да, днес е &nbsp; плюс интервал, и така няма проблем - при копирането се трансформира в два интервала и редът се поставя коректно навсякъде. Но вчера не беше така, в изходния код на страницата си се виждаше просто един интервал, но сложиш ли го в гореспоменатите програми, се оказваше различен (запазваше си различието при прехвърляне и между програмите, не само от браузъра). Вчерашният ред, когато се изпълни в tilda, iptables пищи за лош аргумент MASQUERADE, но когато се изпълни в lxterminal, странният интервал става на два интервала и се изпълнява коректно, така че проблемът не е в lxterminal, той засега ми е единственият, който преобразува странния интервал към нещо коректно. А, да, и буферът при копиране от менюто на десния бутон го преобразува коректно. Редът трябва да се копира само със селектиране и поставяне със среден бутон, за да се запази странният интервал.
Я да пробвам да сложа тук копие на вчерашния ред, пък да видим как ще изглежда

Код:
iptables -t nat -A POSTROUTING -o eth1 -d ! 10.0.0.0/24 -j MASQUERADE

Цитат
iptables -t nat -A POSTROUTING -o eth1 -d ! 10.0.0.0/24 -j MASQUERADE

Код
GeSHi (Bash):
  1. iptables -t nat -A POSTROUTING -o eth1 -d ! 10.0.0.0/24 -j MASQUERADE

П.П.: А!? Сега пък си е само &nbsp; без интервал. Може би само dark_elf може да повтори ситуацията точно така, както си беше вчера :) Само с &nbsp; без интервал (както е сега в браузъра) няма проблем при копиране в tilda, командата се изпълнява. Но вчерашното копие в tilda продължава да си е проблемно.