alibek Posted June 5, 2017 Posted June 5, 2017 Есть такая строчка правил: iptables -t NAT -A PREROUTING -i eth1 -s 1.2.3.4 -p udp -d 1.2.3.5 --dport 53 -j DNAT --to-destination 127.0.0.53:53 Выполняется нормально, DNS-запросы с 1.2.3.4 (тестовая машина) на 1.2.3.5 (публичный DNS) перенаправляет на внутренний интерфейс. Заменяю правило на такое: ipset create SVC-DNS hash:ip,port ipset add SVC-DNS 1.2.3.5,udp:53 iptables -t NAT -A PREROUTING -i eth1 -s 1.2.3.4 -p udp -m set --match-set SVC-DNS dst -j DNAT --to-destination 127.0.0.53:53 и перестает работать, счетчик правил на нуле. Что неправильно? Вставить ник Quote
taf_321 Posted June 5, 2017 Posted June 5, 2017 ---iptables -t NAT -A PREROUTING -i eth1 -s 1.2.3.4 -p udp -m set --match-set SVC-DNS dst -j DNAT --to-destination 127.0.0.53:53 +++iptables -t NAT -A PREROUTING -i eth1 -s 1.2.3.4 -p udp -m set --match-set SVC-DNS dst,dst -j DNAT --to-destination 127.0.0.53:53 не? Вставить ник Quote
alibek Posted June 5, 2017 Author Posted June 5, 2017 Хотя нет, все работает. Сейчас правила такие: ipset create FWD-DNS hash:ip,port ipset add FWD-DNS aa.aa.124.1,udp:53 ipset add FWD-DNS aa.aa.124.1,tcp:53 ipset add FWD-DNS aa.aa.124.124,udp:53 ipset add FWD-DNS aa.aa.124.124,tcp:53 iptables -t nat -A PREROUTING -i eth1 -p udp -m set ! --match-set EXT src -m set --match-set FWD-DNS dst,dst -j DNAT --to-destination 127.0.0.53:53 iptables -t nat -A PREROUTING -i eth1 -p tcp -m set ! --match-set EXT src -m set --match-set FWD-DNS dst,dst -j DNAT --to-destination 127.0.0.53:53 Можно ли это как-то сократить? Я протокол указываю и в ipset, и в правилах, что мне кажется избыточным. Но если правило заменить на одно без указания протокола (-p), то оно не применяется, требует указания протокола. А если я указываю протокол, то записи ipset с другим протоколом игнорируются. Вставить ник Quote
taf_321 Posted June 5, 2017 Posted June 5, 2017 Хм... А если не указывать -p и так же не указывать udp/tcp в ipset? Вставить ник Quote
alibek Posted June 5, 2017 Author Posted June 5, 2017 Если для ipset не указывать протокол, то используется tcp. Все равно выдает сообщение, что нужен протокол. Вставить ник Quote
vop Posted June 6, 2017 Posted June 6, 2017 Если номер порта надо проверять, то и протокол надо указывать. И там и там. За исключением протокола "по умолчанию". Вставить ник Quote
alibek Posted June 6, 2017 Author Posted June 6, 2017 Как я понял, протокола по умолчанию нет, протокол всегда или udp, или tcp (если не указан). В ipset это меня вполне устраивает. Но в iptables из-за этого приходится два правила добавлять, потому что без ключа -p правило не загружается. Вставить ник Quote
vop Posted June 6, 2017 Posted June 6, 2017 Как я понял, протокола по умолчанию нет, протокол всегда или udp, или tcp (если не указан). В ipset это меня вполне устраивает. Но в iptables из-за этого приходится два правила добавлять, потому что без ключа -p правило не загружается. Ну в ipset есть протокол по умолчанию (tcp), а в iptables надо обязательно протокол указывать, если если писать селектор match-set по порту. Вставить ник Quote
alibek Posted June 15, 2017 Author Posted June 15, 2017 Парочка вопросов есть по iptables. 1. -m set нужно указывать один раз или для каждого match-set? То есть "-m set --match-set S1 src -m set --match-set D1 dst" или "-m set --match-set S1 src --match-set D1 dst"? 2. Если я указываю "--match-set S1 src,dst", то используется логика OR или AND? То есть сету S1 должен соответствовать источник и приемник или любой из них? Вставить ник Quote
alibek Posted June 15, 2017 Author Posted June 15, 2017 И еще вопрос. Допустим мне нужно задать правило для подсети, например 192.168.1.0/24. Как лучше это правило задавать, с помощью модуля set (-m set --match-set NET src) или непосредственно (-s 192.168.1.0/24)? Мне для единообразия в эстетическом смысле удобнее всю адресацию задавать через ipset. Но если первый вариант заметно медленнее второго, я лучше буду использовать второй вариант. Вставить ник Quote
bomberman Posted June 15, 2017 Posted June 15, 2017 Заметно, вряд ли. Тут скорее всего будет правильнее использовать ipset, в случае набора подсетей для правила/действия. А при единственном случае, то смысла нет. Вставить ник Quote
vop Posted June 15, 2017 Posted June 15, 2017 Парочка вопросов есть по iptables. 1. -m set нужно указывать один раз или для каждого match-set? То есть "-m set --match-set S1 src -m set --match-set D1 dst" или "-m set --match-set S1 src --match-set D1 dst"? Я подозреваю, что одного раза хватит, хотя, надо просто проверить. Если одного не хватит - оно должно поругаться. 2. Если я указываю "--match-set S1 src,dst", то используется логика OR или AND?То есть сету S1 должен соответствовать источник и приемник или любой из них? Это описание сета с двумя параметрами. Т.е. в сете S1 долнжа быть строка, в которой оба параметра совпадают с инфой из пакета. И еще вопрос. Допустим мне нужно задать правило для подсети, например 192.168.1.0/24. Как лучше это правило задавать, с помощью модуля set (-m set --match-set NET src) или непосредственно (-s 192.168.1.0/24)? Мне для единообразия в эстетическом смысле удобнее всю адресацию задавать через ipset. Но если первый вариант заметно медленнее второго, я лучше буду использовать второй вариант. Если сеть будет всегда одна - то проще прямо в iptables прописать. Если сетей может быть в будущем несколько, или задействован какой-нибудь механизм автоматизации создания правил, то лучше через ipstt. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.