ΠΠ΅ ΡΠ°ΠΊ Π΄Π°Π²Π½ΠΎ Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ Π²Π΅ΡΡΠΌΠ° Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΌΠ°ΡΡΡΡΡΠΈΡΠ°ΡΠΈΠΈ Π΄Π»Ρ MetalLB. ΠΡΡ Π±Ρ Π½ΠΈΡΠ΅Π³ΠΎ, Ρ.ΠΊ. ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ MetalLB Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, Π½ΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠΌΠ΅Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Ρ Π²Π΅ΡΡΠΌΠ° Π½Π΅Ρ
ΠΈΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ ΡΠ΅ΡΠΈ.
Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ source-based ΠΈ policy-based routing Π΄Π»Ρ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΠ΅ΡΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
Π― Π½Π΅ Π±ΡΠ΄Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ MetalLB, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ Π²Ρ ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΡ. ΠΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ Π΄Π΅Π»Ρ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠ°ΠΊ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΡΠ΅ΡΡΡΠ΅ ΠΊΠ΅ΠΉΡΠ°:
Π‘Π»ΡΡΠ°ΠΉ 1: ΠΠΎΠ³Π΄Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ
Π Π°Π·Π±Π΅ΡΡΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠ΅ΠΉΡ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΄Π°Π²Π°Π΅ΠΌΡΠ΅ MetalLB Π°Π΄ΡΠ΅ΡΠ° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ ΡΡΠΎ ΠΈ Π°Π΄ΡΠ΅ΡΠ° Π²Π°ΡΠΈΡ Π½ΠΎΠ΄.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΡ 192.168.1.0/24
, Π² Π½Π΅ΠΉ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡ 192.168.1.1
, ΠΈ Π²Π°ΡΠΈ Π½ΠΎΠ΄Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π°Π΄ΡΠ΅ΡΠ°: 192.168.1.10-30
, ΡΠΎΠ³Π΄Π° Π΄Π»Ρ MetalLB Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ΅ΠΉΠ½Π΄ΠΆ 192.168.1.100-120
ΠΈ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ ΡΡΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ.
ΠΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Π°ΡΠΈ Π½ΠΎΠ΄Ρ ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ:
# ip route
default via 192.168.1.1 dev eth0 onlink
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
Π Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ· ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ΅ΠΉΠ΄ΠΆΠ° Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ.
Π‘Π»ΡΡΠ°ΠΉ 2: ΠΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
ΠΠ°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π· ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Π°ΡΠΈ Π½ΠΎΠ΄Ρ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΡΡΡΠ° Π² ΠΏΠΎΠ΄ΡΠ΅ΡΡ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ MetalLB Π²ΡΠ΄Π°ΡΡ Π°Π΄ΡΠ΅ΡΠ°.
ΠΠ±ΡΡΡΠ½Ρ ΡΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅ΠΉ. ΠΡΡΠΊΠΈΠΉ ΡΠ°Π· ΠΊΠΎΠ³Π΄Π° MetalLB Π²ΡΠ΄ΡΡ Π°Π΄ΡΠ΅Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΡ Ρ ΠΏΡΠΎΡΡΡΠΌ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΈΠ΄Π°:
ip addr add 10.9.8.7/32 dev lo
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π°:
- a) ΠΠ΄ΡΠ΅Ρ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ
/32
ΡΠΎ Π΅ΡΡΡ ΠΌΠ°ΡΡΡΡΡ Π² ΠΏΠΎΠ΄ΡΠ΅ΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡΡ (ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π°Π΄ΡΠ΅Ρ) - b) ΠΠ΄ΡΠ΅Ρ Π²Π΅ΡΠ°Π΅ΡΡΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½ΠΎΠ΄Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ loopback). ΠΠ΄Π΅ΡΡ ΡΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΠΎΠ± ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ° Linux. ΠΠ΅ Π²Π°ΠΆΠ½ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π°Π΄ΡΠ΅Ρ, ΡΠ΄ΡΠΎ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ arp-Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ arp-ΠΎΡΠ²Π΅ΡΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ , ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΊΠΎΡΠ΅ΠΊΡΠ½ΡΠΌ ΠΈ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ°ΠΊΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠ΅Π΄Π΅ ΠΊΠ°ΠΊ Kubernetes.
ΠΠ°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΊΠ»ΡΡΠΈΠ² strict arp:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ arp-ΠΎΡΠ²Π΅ΡΡ Π±ΡΠ΄ΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ²Π½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ IP-Π°Π΄ΡΠ΅Ρ. ΠΠ°Π½Π½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ MetalLB ΠΈ Π²Π°Ρ kube-proxy ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ IPVS.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ MetalLB Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΄ΡΠΎ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ arp-Π·Π°ΠΏΡΠΎΡΠΎΠ², Π° Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π² user-space, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄Π°Π½Π½Π°Ρ ΠΎΠΏΡΠΈΡ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ°Π±ΠΎΡΡ MetalLB.
ΠΠ΅ΡΠ½ΡΠΌΡΡ ΠΊ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠ΅. ΠΡΠ»ΠΈ ΠΌΠ°ΡΡΡΡΡΠ° Π΄Π»Ρ Π²ΡΠ΄Π°Π²Π°Π΅ΠΌΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ² Π½Π° Π²Π°ΡΠΈΡ Π½ΠΎΠ΄Π°Ρ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΅Π³ΠΎ Π·Π°ΡΠ°Π½Π΅Π΅ Π½Π° Π²ΡΠ΅ Π½ΠΎΠ΄Ρ:
ip route add 10.9.8.0/24 dev eth1
Π‘Π»ΡΡΠ°ΠΉ 3: ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ source-based routing
Source-based routing Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ΅ΡΠ΅Π· ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ gateway, Π½Π΅ ΡΠΎΡ ΡΡΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½ Ρ Π²Π°Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΡ ΡΡ ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΠΎΡ ΠΆΠ΅ gateway.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΡΡ ΡΠ°ΠΆΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΡ 192.168.1.0/24
Π²ΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ Π΄Π»Ρ Π²Π°ΡΠΈΡ
Π½ΠΎΠ΄, Π½ΠΎ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ Π²ΡΠ΄Π°Π²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ MetalLB. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈΠ· ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ 1.2.3.0/24
Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΡ Π²ΠΎ VLAN 100, ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ
Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° Kubernetes-ΡΠ»ΡΠΆΠ± ΠΈΠ·Π²Π½Π΅.
ΠΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ Π½Π° 1.2.3.4
Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ Π½Π΅ΠΆΠ΅Π»ΠΈ 1.2.3.0/24
ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΎΡΠ²Π΅Ρ. ΠΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ Π΄Π»Ρ Π²ΡΠ΄Π°Π½Π½ΠΎΠ³ΠΎ MetalLB Π°Π΄ΡΠ΅ΡΠ° 1.2.3.4
, ΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΎΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡΠ° 1.2.3.1
, Π½ΠΎ ΠΎΡΠ²Π΅Ρ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΉΡΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΌΠ°ΡΡΡΡΡΠΎΠΌ, ΡΠ΅ΡΠ΅Π· 1.2.3.1
.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΡΠ° Π½ΠΎΠ΄Π° ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ default gateway 192.168.1.1
, ΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΡΠ²Π΅Ρ ΠΏΠΎΠΉΠ΄ΡΡ ΠΊ Π½Π΅ΠΌΡ, Π° Π½Π΅ ΠΊ 1.2.3.1
, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ.
ΠΠ°ΠΊ ΠΆΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠ΅ΠΉ?
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ Π²ΡΠ΅ Π²Π°ΡΠΈ Π½ΠΎΠ΄Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π³ΠΎΡΠΎΠ²Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. Π’ΠΎ Π΅ΡΡΡ Π΄Π»Ρ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°ΡΡ VLAN-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Π½ΠΎΠ΄Π΅:
ip link add link eth0 name eth0.100 type vlan id 100
ip link set eth0.100 up
Π Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠ°ΡΡΡΡΡΡ:
ip route add 1.2.3.0/24 dev eth0.100 table 100
ip route add default via 1.2.3.1 table 100
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΡΡΡΡ ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ°Π±ΠΈΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ 100
ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΠΌΠ°ΡΡΡΡΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΎΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠ΅ΡΠ΅Π· Π³Π΅ΠΉΡΠ²Π΅ΠΉ 1.2.3.1
, Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π·Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ eth0.100
.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ:
ip rule add from 1.2.3.0/24 lookup 100
ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²Π½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ: Π΅ΡΠ»ΠΈ Π°Π΄ΡΠ΅Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² 1.2.3.0/24
, ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΈΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ 100
. Π Π½Π΅ΠΉ Ρ Π½Π°Ρ ΡΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½ ΠΌΠ°ΡΡΡΡΡ ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΏΡΠ°Π²ΠΈΡ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· 1.2.3.1
Π‘Π»ΡΡΠ°ΠΉ 4: ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ policy-based routing
Π’ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠ΅ΡΠΈ ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΈΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π²Π½Π΅ΡΠ½ΠΈΠΌ Π°Π΄ΡΠ΅ΡΠ°ΠΌ ΠΏΡΠ»Π° 1.2.3.0/24
ΠΈΠ· Π²Π°ΡΠΈΡ
ΠΏΠΎΠ΄ΠΎΠ²:
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ ΡΡΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Π»ΡΠ±ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ Π² 1.2.3.0/24
, ΠΎΡΠ²Π΅ΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΠΎΠΏΠ°Π΄Π°Ρ Π½Π° Π½ΠΎΠ΄Ρ ΠΈ ΠΈΠΌΠ΅Ρ Π°Π΄ΡΠ΅Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 1.2.3.0/24
Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ»ΡΡΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ Π² eth0.100
, Π½ΠΎ ΠΌΡ-ΡΠΎ Ρ
ΠΎΡΠΈΠΌ ΡΡΠΎΠ±Ρ Kubernetes ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΠ» Π΅Π³ΠΎ Π² Π½Π°Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΠΎΡ.
Π Π΅ΡΠΈΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π½Π΅ΠΏΡΠΎΡΡΠΎ, Π½ΠΎ ΡΡΠΎ ΡΡΠ°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ policy-based routing:
ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Ρ Π±Π»ΠΎΠΊ ΡΡ
Π΅ΠΌΡ netfilter:
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π°, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ:
ip route add 1.2.3.0/24 dev eth0.100 table 100
ip route add default via 1.2.3.1 table 100
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ» Π² iptables:
iptables -t mangle -A PREROUTING -i eth0.100 -j CONNMARK --set-mark 0x100
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j RETURN
iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark
ΠΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π±ΡΠ΄ΡΡ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ eth0.100
, ΠΏΠΎΠΌΠ΅ΡΠ°Ρ Π²ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΡΠ³ΠΎΠΌ 0x100
, ΡΡΠΈΠΌ ΠΆΠ΅ ΡΡΠ³ΠΎΠΌ Π±ΡΠ΄ΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ ΠΈ ΠΎΡΠ²Π΅ΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠΎΡΡΠΈΠ½Π³Π°:
ip rule add from 1.2.3.0/24 fwmark 0x100 lookup 100
Π’ΠΎ Π΅ΡΡΡ Π²ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° 1.2.3.0/24
ΠΈ ΡΡΠ³ΠΎΠΌ 0x100
Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°Π±Π»ΠΈΡΡ 100
.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΏΠΎΠ΄ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΈΠΌ Π±ΡΡΡ ΡΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Kubernetes.
ΠΡΡΡ Π΅ΡΡ ΠΎΠ΄Π½ΠΎ Π½ΠΎ, Π² Linux ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ reverse path filter, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΡΠΈΡ Π²ΡΡ ΠΌΠ°Π»ΠΈΠ½Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ: Π΄Π»Ρ Π²ΡΠ΅Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΎΠ½ ΠΌΠ΅Π½ΡΠ΅Ρ Π°Π΄ΡΠ΅Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ-Π»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΡΠΉΡΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΎΡ-ΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½, Π΅ΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²ΡΠ²Π΅Ρ Π΅Π³ΠΎ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ ΡΡΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, Π½ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0.100/rp_filter
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ rp_filter, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ Π½Π΅ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ, ΡΠΎ Π²ΡΠΎΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΡΠ°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΎΡΡΠ°Π½ΡΡΡΡ ΡΠΎ Π²ΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ rp_filter.
Π§ΡΠΎΠ±Ρ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΈΠ»ΡΡΡΠ° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ rp_filter Π΄Π»Ρ netfilter. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ rpfilter Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ iptables ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
iptables -t raw -A PREROUTING -i eth0.100 -d 1.2.3.0/24 -j RETURN
iptables -t raw -A PREROUTING -i eth0.100 -m rpfilter --invert -j DROP
Π²ΠΊΠ»ΡΡΠ°Ρ rp_filter Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ eth0.100
Π΄Π»Ρ Π²ΡΠ΅Ρ
Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΊΡΠΎΠΌΠ΅ 1.2.3.0/24
.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com