Этот коммит содержится в:
Ihar Hancharenka 2025-07-28 16:24:28 +03:00
родитель 787f3c5475
Коммит 1e20d166df
2 изменённых файлов: 88 добавлений и 0 удалений

Просмотреть файл

@ -1,3 +1,9 @@
TODO
https://forums.docker.com/t/solved-docker-networking-routing-containers/42050/8
https://forums.docker.com/t/routing-network-traffic-from-one-service-to-another/117816
https://docs.docker.com/engine/network/packet-filtering-firewalls/
!!!
networks:
vault-network:
ipam:

Просмотреть файл

@ -24,3 +24,85 @@ https://freedium.cfd/https://medium.com/@marthin.pasaribu_72336/linux-policy-rou
2013
https://blog.scottlowe.org/2013/05/29/a-quick-introduction-to-linux-policy-routing/
local-table is non-modifiable
Для перенаправления трафика внутрь Docker-контейнера с использованием policy routing, необходимо выполнить несколько шагов.
В этом сценарии вы можете использовать iptables и ip rule для управления маршрутизацией.
Предположим, у вас есть Docker-контейнер с известным IP-адресом или именем.
### Пошаговое руководство:
1. **Узнайте IP-адрес контейнера**:
Используйте команду `docker inspect` для получения IP-адреса контейнера:
```
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name_or_id>
```
Предположим, IP-адрес контейнера — `172.17.0.2` (замените на ваш IP-адрес).
2. **Создайте отдельную таблицу маршрутов**:
В файле `/etc/iproute2/rt_tables` добавьте новую таблицу маршрутов, например:
```
100 docker
```
3. **Добавьте маршрут для контейнера в новую таблицу**:
Добавьте маршрут через виртуальную сеть Docker в новую таблицу. Например:
```
ip route add 172.17.0.0/16 dev docker0 table docker
```
Здесь `docker0` — это стандартное имя моста Docker.
4. **Создайте правило для перенаправления определённого трафика**:
Используйте команду `ip rule` для перенаправления нужного трафика в вашу таблицу маршрутизации.
Например, перенаправьте весь трафик, поступающий на определённый IP-адрес (например, публичный IP вашего хоста):
```
ip rule add from <source_ip> lookup docker
```
Или вы можете перенаправить трафик только по определённому порту:
```
ip rule add fwmark 1 lookup docker
```
5. **Используйте iptables для маркировки пакетов**:
Маркируйте входящий трафик, который вы хотите перенаправить в контейнер.
Например, если вы хотите перенаправить трафик на порт `8080`, используйте команду:
```
iptables -t mangle -A PREROUTING -p tcp --dport 8080 -j MARK --set-mark 1
```
Этот шаг связывает iptables с вашим правилом маршрутизации, созданным на предыдущем этапе.
6. **Настройте NAT для правильной маршрутизации**:
Для того чтобы трафик перенаправлялся в контейнер, вам нужно настроить натирование. Например:
```
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 172.17.0.2:8080
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
```
Здесь гарантируется, что отправленный трафик будет правильно обработан Docker и вернётся в исходное место.
7. **Проверьте настройки**:
Убедитесь, что правило маршрутизации и iptables работают правильно:
```
ip rule show
ip route list table docker
iptables -t mangle -L
iptables -t nat -L
```
8. **Сохраните настройки**:
Чтобы настройки сохранились после перезагрузки, убедитесь, что правила iptables и маршрутизации восстановятся при старте системы.
Например, вы можете использовать `iptables-save` и скрипты для восстановления правил.
Этот подход позволит вам перенаправить входящий трафик через policy routing и iptables внутрь Docker-контейнера.