Jump to content

Recommended Posts

Posted

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

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

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

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

Posted

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

 

не?

Posted

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

 

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

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

Posted

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

Posted

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

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

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

Posted

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

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

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

 

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

  • 2 weeks later...
Posted

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

Posted

И еще вопрос.

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

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

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

Posted

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

Posted

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.