Перейти к содержимому
Калькуляторы

Не работает ipset hash:ip,port

Есть такая строчка правил:

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

и перестает работать, счетчик правил на нуле.

Что неправильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

---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

 

не?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хотя нет, все работает.

 

Сейчас правила такие:

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 с другим протоколом игнорируются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хм... А если не указывать -p и так же не указывать udp/tcp в ipset?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если для ipset не указывать протокол, то используется tcp.

Все равно выдает сообщение, что нужен протокол.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если номер порта надо проверять, то и протокол надо указывать. И там и там. За исключением протокола "по умолчанию".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как я понял, протокола по умолчанию нет, протокол всегда или udp, или tcp (если не указан).

В ipset это меня вполне устраивает.

Но в iptables из-за этого приходится два правила добавлять, потому что без ключа -p правило не загружается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как я понял, протокола по умолчанию нет, протокол всегда или udp, или tcp (если не указан).

В ipset это меня вполне устраивает.

Но в iptables из-за этого приходится два правила добавлять, потому что без ключа -p правило не загружается.

 

Ну в ipset есть протокол по умолчанию (tcp), а в iptables надо обязательно протокол указывать, если если писать селектор match-set по порту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Парочка вопросов есть по 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 должен соответствовать источник и приемник или любой из них?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И еще вопрос.

Допустим мне нужно задать правило для подсети, например 192.168.1.0/24.

Как лучше это правило задавать, с помощью модуля set (-m set --match-set NET src) или непосредственно (-s 192.168.1.0/24)?

Мне для единообразия в эстетическом смысле удобнее всю адресацию задавать через ipset. Но если первый вариант заметно медленнее второго, я лучше буду использовать второй вариант.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Заметно, вряд ли. Тут скорее всего будет правильнее использовать ipset, в случае набора подсетей для правила/действия. А при единственном случае, то смысла нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Парочка вопросов есть по 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.