ืืคื ื ืืื ืื ืจื ืขืืืชื ืืคื ื ืืฉืืื ืืืื ืื ืฉืืจืชืืช ืฉื ืืืืจืช ื ืืชืื ืขืืืจ MetalLB. ืืื ืืืื ืืกืืจ, ืื... ืืืจื ืืื MetalLB ืื ืืืจืฉืช ืคืขืืืืช ื ืืกืคืืช, ืืื ืืืงืจื ืฉืื ื ืืฉ ืื ื ืืฉืืื ืื ืืืื ืขื ืชืฆืืจืช ืจืฉืช ืคืฉืืื ืืืื.
ืืืืืจ ืื ืืกืคืจ ืื ืืืฆื ืืืืืืจ ื ืืชืื ืืืืกืก ืืงืืจ ืืืืืกืก ืืืื ืืืช ืขืืืจ ืืจืฉืช ืืืืฆืื ืืช ืฉื ืืืฉืืื ืฉืื.
ืื ื ืื ืืคืจื ืขื ืืชืงื ื ืืืืืจื ืฉื 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). ืืืื ืืืืืืจ ืืื ืืช ืืชืืื ืืช ืฉื ืืืกื ืืช ืจืฉืช ืืื ืืงืก. ืื ืืฉื ื ืืืืื ืืืฉืง ืชืืกืืฃ ืืช ืืืชืืืช, ืืงืจื ื ืชืืื ืืขืื ืืงืฉืืช arp ืืืฉืื ืชืืืืืช arp ืืื ืืืช ืืื, ืืชื ืืืืช ืื ื ืืฉืืช ืื ืืื ื ืืืืชืจ ืืื, ื ืืฆืืช ืืฉืืืืฉ ื ืจืื ืืืื ืืกืืืื ืืื ืืืช ืืื ืืื Kubernetes.
ื ืืชื ืืืชืืื ืืชื ืืืืช ืื, ืืืฉื ืขื ืืื ืืคืขืืช 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, ืืื ืขืืฉื ืืืช ืืขืฆืื ืืืจืื ืืืฉืชืืฉ, ืื ืฉืืืคืฉืจืืช ืืื ืื ืชืฉืคืืข ืขื ืคืขืืืช MetalLB.
ืืืื ื ืืืืจ ืืืฉืืื ืฉืื ื. ืื ืืืกืืื ืขืืืจ ืืืชืืืืช ืฉืืื ืคืงื ืื ืงืืื ืืฆืืชืื ืฉืื, ืืืกืฃ ืืืชื ืืจืืฉ ืืื ืืฆืืชืื:
ip route add 10.9.8.0/24 dev eth1
ืืงืจื 3: ืืืฉืจ ืืชื ืฆืจืื ื ืืชืื ืืืืกืก ืืงืืจ
ืชืฆืืจื ืืืืืืจ ื ืืชืื ืืืืกืก ืืงืืจ ืืืฉืจ ืืชื ืืงืื ืื ืืช ืืจื ืฉืขืจ ื ืคืจื, ืื ืื ืฉืืืืืจ ืืืจืืจืช ืืืื, ืืื ืื ืื ืืช ืชืืืื ืฆืจืืืืช ืืขืืืจ ืืจื ืืืชื ืฉืขืจ.
ืืืืืื, ืืฉ ืื ืืช ืืืชื ืจืฉืช ืืฉื ื 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
.
ืืืืืื ืฉืืฆืืืช ืฉืื ื ืืืจ ืืฉ ืฉืขืจ ืืจืืจืช ืืืื ืืืืืจ 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: ืืืฉืจ ืืชื ืฆืจืื ื ืืชืื ืืืืกืก ืืืื ืืืช
ืืืคืืืืืืืช ืืจืฉืช ืืื ืืื ืฉืืืืืื ืืงืืืืช, ืืื ื ื ืื ืฉืืชื ืื ืจืืฆื ืืืืืช ืืกืืื ืืืฉืช ืืืชืืืืช ืืืืจ ืืืฆืื ืืืช 1.2.3.0/24
ืืืชืจืืืืื ืฉืื:
ืืืืืจืืช ืืื ืฉืืืฉืจ ื ืืืฉืื ืืื ืืชืืืช ื 1.2.3.0/24
, ืืืืืช ืืชืืืื ืคืืืขืช ืืฆืืืช ืืืฉ ืื ืืชืืืช ืืงืืจ ืืืืื 1.2.3.0/24
ืืืฉืื ืืฆืืืชื ืืช ื eth0.100
, ืืื ืื ืื ื ืจืืฆืื ืฉ-Kubernetes ืืคื ื ืืืชื ืื ืืคืื ืืจืืฉืื ืฉืื ื, ืฉืืฆืจ ืืช ืืืงืฉื ืืืงืืจืืช.
ืคืชืจืื ืืขืื ืื ืืชืืจืจ ืืงืฉื, ืื ืื ืืคื ืืคืฉืจื ืืืืืช ืื ืืชืื ืืืืกืก ืืืื ืืืช:
ืืืื ื ืืืื ืืืชืจ ืฉื ืืชืืืื, ืื ื ืชืจืฉืื ืืืืงืื ืฉื 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 ืกืื ืืจืืืื.
ืืฉ ืขืื ืืืจ ืืื, ืืืื ืืงืก ืืฉ ืื ืฉื ืงืจื ืืกื ื ื ืชืื ืืคืื, ืฉืืงืืงื ืืช ืื ืืขื ืืื, ืืื ืืืฆืข ืืืืงื ืคืฉืืื: ืขืืืจ ืื ืืืืืืืช ืื ืื ืกืืช, ืืื ืืฉื ื ืืช ืืชืืืช ืืืงืืจ ืฉื ืืืืืื ืขื ืืชืืืช ืืฉืืื ืืืืืง ืื ืืืืืื ืืืืื ืืฆืืช ืืจื ืืืชื ืืืฉืง ืฉืื ืืื ืืชืงืืื, ืื ืื, ืืื ืชืกื ื ืืืชื.
ืืืขืื ืืื ืฉืืืงืจื ืฉืื ื ืื ืื ืืขืืื ืืื ืฉืฆืจืื, ืืื ืื ืื ื ืืืืืื ืืืฉืืืช ืืช ืื:
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
.
ืืงืืจ: www.habr.com