54 lines
2.5 KiB
Django/Jinja
54 lines
2.5 KiB
Django/Jinja
[Unit]
|
|
Description=Policy routing — DNS ответы через балансировщики
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
RemainAfterExit=yes
|
|
|
|
{% if policy_routing_balancers | length > 0 %}
|
|
# Режим MAC-matching: отдельная таблица и правило для каждого балансировщика
|
|
{% for balancer in policy_routing_balancers %}
|
|
ExecStartPre=-/usr/sbin/ip rule del fwmark {{ balancer.fwmark }} table {{ balancer.table_id }} priority {{ 100 + loop.index0 }}
|
|
ExecStartPre=-/usr/sbin/ip route flush table {{ balancer.table_id }}
|
|
{% endfor %}
|
|
{% for balancer in policy_routing_balancers %}
|
|
ExecStart=/usr/sbin/ip rule add fwmark {{ balancer.fwmark }} table {{ balancer.table_id }} priority {{ 100 + loop.index0 }}
|
|
ExecStart=/usr/sbin/ip route add default table {{ balancer.table_id }} via {{ balancer.ip }}
|
|
{% endfor %}
|
|
{% for route in policy_routing_local_routes %}
|
|
{% for balancer in policy_routing_balancers %}
|
|
ExecStart=/usr/sbin/ip route add {{ route }} table {{ balancer.table_id }}
|
|
{% endfor %}
|
|
{% endfor %}
|
|
|
|
{% for balancer in policy_routing_balancers %}
|
|
ExecStop=-/usr/sbin/ip rule del fwmark {{ balancer.fwmark }} table {{ balancer.table_id }} priority {{ 100 + loop.index0 }}
|
|
ExecStop=-/usr/sbin/ip route flush table {{ balancer.table_id }}
|
|
{% endfor %}
|
|
|
|
{% else %}
|
|
# Режим ECMP (обратная совместимость: один или несколько балансировщиков без MAC)
|
|
ExecStartPre=-/usr/sbin/ip rule del fwmark {{ policy_routing_fwmark }} table {{ policy_routing_table_id }} priority 100
|
|
ExecStartPre=-/usr/sbin/ip route flush table {{ policy_routing_table_id }}
|
|
ExecStart=/usr/sbin/ip rule add fwmark {{ policy_routing_fwmark }} table {{ policy_routing_table_id }} priority 100
|
|
ExecStart=/usr/sbin/ip route add default table {{ policy_routing_table_id }} \
|
|
{% for gw in policy_routing_gateways %}
|
|
nexthop via {{ gw }} weight 1 {% if not loop.last %} \{% endif %}
|
|
{% endfor %}
|
|
|
|
{% for route in policy_routing_local_routes %}
|
|
ExecStart=/usr/sbin/ip route add {{ route }} table {{ policy_routing_table_id }}
|
|
{% endfor %}
|
|
|
|
ExecStop=-/usr/sbin/ip rule del fwmark {{ policy_routing_fwmark }} table {{ policy_routing_table_id }} priority 100
|
|
{% for route in policy_routing_local_routes %}
|
|
ExecStop=-/usr/sbin/ip route del {{ route }} table {{ policy_routing_table_id }}
|
|
{% endfor %}
|
|
ExecStop=-/usr/sbin/ip route flush table {{ policy_routing_table_id }}
|
|
{% endif %}
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|