зеркало из
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:
|
||||
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-контейнера.
|
||||
|
||||
Загрузка…
x
Ссылка в новой задаче
Block a user