зеркало из
				https://github.com/iharh/notes.git
				synced 2025-10-30 21:26:09 +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
	 Ihar Hancharenka
						Ihar Hancharenka