alibek Опубликовано 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 и перестает работать, счетчик правил на нуле. Что неправильно? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 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 не? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 5 июня, 2017 · Жалоба Нет, без изменений. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 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 с другим протоколом игнорируются. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 5 июня, 2017 · Жалоба Хм... А если не указывать -p и так же не указывать udp/tcp в ipset? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 5 июня, 2017 · Жалоба Если для ipset не указывать протокол, то используется tcp. Все равно выдает сообщение, что нужен протокол. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 6 июня, 2017 · Жалоба Если номер порта надо проверять, то и протокол надо указывать. И там и там. За исключением протокола "по умолчанию". Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 6 июня, 2017 · Жалоба Как я понял, протокола по умолчанию нет, протокол всегда или udp, или tcp (если не указан). В ipset это меня вполне устраивает. Но в iptables из-за этого приходится два правила добавлять, потому что без ключа -p правило не загружается. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 6 июня, 2017 · Жалоба Как я понял, протокола по умолчанию нет, протокол всегда или udp, или tcp (если не указан). В ipset это меня вполне устраивает. Но в iptables из-за этого приходится два правила добавлять, потому что без ключа -p правило не загружается. Ну в ipset есть протокол по умолчанию (tcp), а в iptables надо обязательно протокол указывать, если если писать селектор match-set по порту. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 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 должен соответствовать источник и приемник или любой из них? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 15 июня, 2017 · Жалоба И еще вопрос. Допустим мне нужно задать правило для подсети, например 192.168.1.0/24. Как лучше это правило задавать, с помощью модуля set (-m set --match-set NET src) или непосредственно (-s 192.168.1.0/24)? Мне для единообразия в эстетическом смысле удобнее всю адресацию задавать через ipset. Но если первый вариант заметно медленнее второго, я лучше буду использовать второй вариант. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bomberman Опубликовано 15 июня, 2017 · Жалоба Заметно, вряд ли. Тут скорее всего будет правильнее использовать ipset, в случае набора подсетей для правила/действия. А при единственном случае, то смысла нет. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 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. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...