зеркало из
https://github.com/iharh/notes.git
synced 2025-10-30 13:16:07 +02:00
m
Этот коммит содержится в:
родитель
787f3c5475
Коммит
1e20d166df
@ -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:
|
networks:
|
||||||
vault-network:
|
vault-network:
|
||||||
ipam:
|
ipam:
|
||||||
|
|||||||
@ -24,3 +24,85 @@ https://freedium.cfd/https://medium.com/@marthin.pasaribu_72336/linux-policy-rou
|
|||||||
2013
|
2013
|
||||||
https://blog.scottlowe.org/2013/05/29/a-quick-introduction-to-linux-policy-routing/
|
https://blog.scottlowe.org/2013/05/29/a-quick-introduction-to-linux-policy-routing/
|
||||||
local-table is non-modifiable
|
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-контейнера.
|
||||||
|
|||||||
Загрузка…
x
Ссылка в новой задаче
Block a user