notes/net/proxy/pbr-policy-based-routing.txt
Ihar Hancharenka 8b70b6601a m
2025-07-29 16:04:14 +03:00

160 строки
7.3 KiB
Plaintext

?
https://n2x.io/blog/advanced-linux-routing-with-policy-routing
https://www.baeldung.com/linux/destination-source-routing
https://lartc.org/
http://www.ralphb.net/IPSubnet/
http://www.kohala.com/start/
https://tldp.org/HOWTO/Adv-Routing-HOWTO/index.html
https://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.simple.html
https://serverfault.com/questions/1120143/make-ip-route-and-routing-rules-permanent-using-nmcli-on-rhel-8-rocky-8
... proto static/kernel
Linux Network Administrators Guide
https://tldp.org/LDP/nag2/index.html
Guide to IP Layer Network Administration with Linux
http://linux-ip.net/html/index.html
tools
https://subnetonline.com/
nmcli
https://www.ibm.com/support/pages/setup-policy-based-routing-networkmanager
https://www.networkmanager.dev/docs/api/latest/nm-settings-nmcli.html
https://www.golinuxcloud.com/nmcli-command-examples-cheatsheet-centos-rhel/
4. ip routing
http://linux-ip.net/html/ch-routing.html
4.7. routing cache
http://linux-ip.net/html/routing-cache.html
5. nat
http://linux-ip.net/html/ch-nat.html
http://linux-ip.net/html/nat-overview.html
http://linux-ip.net/html/nat-stateless.html
http://linux-ip.net/html/nat-dnat.html
http://www.linas.org/linux/load.html
D.2
http://linux-ip.net/html/tools-ip-route.html
rules
https://bbs.archlinux.org/viewtopic.php?id=251095
https://doc.lagout.org/network/inetdoc/Policy_Routing_in_Linux_ENG.pdf
https://blog.scottlowe.org/2013/05/29/a-quick-introduction-to-linux-policy-routing/
http://www.policyrouting.org/
http://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH05.web.html
ip rule help
man ip-rule
$ ip rule
help
http://linux-ip.net/html/tools-ip-rule.html
list/show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
add/del SELECTOR ACTION
flush
save
restore
https://doc.lagout.org/network/
https://doc.lagout.org/network/inetdoc/
https://doc.lagout.org/network/inetdoc/Policy_Routing_in_Linux_ENG.pdf
http://www.policyrouting.org/
http://www.policyrouting.org/PolicyRoutingBook/ONLINE/TOC.html
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/configuring-policy-based-routing-to-define-alternative-routes_configuring-and-managing-networking
2025
https://blog.sdn.clinic/2025/01/advanced-linux-routing-policy-based-routing/
ip rule add dport 80 table 80
ip rule add dport 443 table 80
ip route add default via 192.168.178.1 dev eth1 table 80
2021
https://freedium.cfd/https://medium.com/@marthin.pasaribu_72336/linux-policy-routing-introduction-37933f8cb62e
ip rule list
ip rule add from 192.168.39.199 lookup custom
ip route add default via 192.168.30.2 dev eth1 table custom
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-контейнера.