notes/net/proxy/pbr-policy-based-routing.txt
Ihar Hancharenka 2735b91da7 m
2025-07-29 18:48:25 +03:00

184 строки
9.4 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/
rh
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_and_managing_networking/index
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_and_managing_networking/configuring-policy-based-routing-to-define-alternative-routes
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/pdf/configuring_and_managing_networking/Red_Hat_Enterprise_Linux-10-Configuring_and_managing_networking-en-US.pdf
? no this in rh10
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/configuring_and_managing_networking/configuring-policy-based-routing-to-define-alternative-routes_configuring-and-managing-networking
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
https://www.man7.org/linux/man-pages/man8/ip-rule.8.html
list/show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
add/del SELECTOR ACTION
SELECTOR
... [ fwmark FWMARK[/MASK] ]
https://unix.stackexchange.com/questions/626779/whats-the-meaning-of-these-ip-route-rules
ip rule add fwmark 1 lookup 100
adds a rule to packets marked as 1 (I suppose with a --set-mark 1 in iptables)
https://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.netfilter.html
https://utcc.utoronto.ca/~cks/space/blog/linux/LinuxIpFwmarkMasks
https://utcc.utoronto.ca/~cks/space/blog/tech/IPRecursiveRoutingProblem
https://serverfault.com/questions/1014323/making-an-ip-rule-higher-priority-than-local
!!!
https://serverfault.com/questions/745878/command-line-utility-to-test-fwmark-in-ip-rule-ip-route
!!! use ip route get with marks
!!! eBPF program can also be attached for marking
https://serverfault.com/questions/1100976/routing-fwmark-to-vpn-gateway-using-nftables-mark
nft insert rule inet fw4 mangle_prerouting ip daddr @marker counter ct mark set 390
nft add rule inet fw4 mangle_prerouting ip daddr @marker counter meta mark set ct mark
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-контейнера.