Но в результате всех этих действий на ноутбуке пропал инет.
Ложиться спать или дальше настраивать?
Разобрался, почему пакеты не приходили!
Нужно было написать -A INPUT -i lo -j ACCEPT
у меня было написано -s 127.0.0.1, но это же не одно и то же! потому что у этих пакетов -s как раз другой, у них -d 127.0.0.1.
В настройках systemd к одному из интерфейсов у меня написано:
[Network]
DHCP=yes
IPForward=ipv4
IPMasquerade=yes
и в таблице nat появляется строчка:
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all — 192.168.0.0/24 0.0.0.0/0
Если эту таблицу сбросить, то подмена адреса прекращается. Но вот что удивительно, адрес-то меняется не на 192.168.0.16, а на адрес другого интерфейса… Хотя, там же в этом дополнительном правиле и не говорится ничего про интерфейс (почему?).
Я прописал правило:
$ iptables -t nat -A OUTPUT -p udp --dport 555 -j REDIRECT --to-ports 5555
Даю команду
$ nc -u ya.ru 556
Это другой порт, он никуда не перенаправляется, поэтому я вижу в tcpdump вполне ожидаемые пакеты:
192.168.0.16.48741 > 87.250.250.242.556
Теперь я пробую
$ nc -u ya.ru 555
и с помощью tcpdump я вижу, что пакеты теперь почему-то имеют другой src-адрес! Не 192.168.0.16, а другого сетевого интерфейса, не буду его палить!
Кроме того, я запускаю
$ nc -l -u localhost 5555
и этих пакетов не вижу! Они почему-то не доходят… Где же они теряются?
На ноутбуке почему-то работает.
Я у мамы админ локалхоста, и я что-то не очень понимаю, как работает -j REDIRECT.
Напердолил тестовую программки, запускаю на ноутбуке — всё работает. Пакеты перенаправляются, куда надо.
Но я смотрю на них в tcpdump, а там:
192.168.13.138.34288 > 127.0.0.1.5555: UDP
меня это смущает :)
Сейчас буду разбираться, почему на десктопе не работает :)
Жуйк, а если я хочу -j DNAT, я могу указать не только другой ip-аредс, но и другой порт? Или нужно сначала DNAT, потом REDIRECT?
Похоже, что запуск docker'а на десктопе ломает напердоленные правила iptables, и на ноуте пропадает интернет.
Неделю пердолился и решил-таки почитать man iptables.
Там ведь почти всё написано.
А вот если суидная программа, то как на нее реагирует -m owner в iptables? или там вот для suid можно прямо правило прописать?