User Tools

Site Tools


ubuntu_iptables_iproute_netpaln

Добавляем таблицы маршрутизации

mcedit /etc/iproute2/rt_tables
...
201 local_net
202 main_inet
203 backup_inet

Включаем networkd-dispatcher

systemctl enable networkd-dispatcher
systemctl start networkd-dispatcher

Создаем скрипт, который будет срабатывать, после
восстановления сетевого интерфейса

touch /etc/networkd-dispatcher/routable.d/10-add-routes.sh
chmod +x /etc/networkd-dispatcher/routable.d/10-add-routes.sh
mcedit /etc/networkd-dispatcher/routable.d/10-add-routes.sh
ip route flush table main_inet
ip route flush table backup_inet
ip route flush table local_net
ip route flush default

ip route add default via 212.212.212.65
ip route add default via 212.212.212.65 dev ens224 table main_inet
ip route add default via 89.89.89.161  dev ens192 table backup_inet
ip route add default via 192.168.150.100  dev ens160 table local_net

ip rule flush
ip rule add from 192.168.150.35/32 to all dport 443 table  backup_inet priority 80
ip rule add from 192.168.150.0/24 to 10.0.0.0/8     table  local_net   priority 90
ip rule add from 192.168.150.0/24 to 192.168.0.0/16 table  local_net   priority 100
ip rule add from 192.168.150.35/32                  table  main_inet   priority 110
ip rule add from 192.168.150.36/32 to 8.8.8.8       table  backup_inet priority 120
ip rule add from 192.168.150.0/24                   table  backup_inet priority 130
ip rule add from all                                lookup main       priority 32766
ip rule add from all                                lookup default    priority 32767

Проверяем: отключаем, затем включаем интерфейс ens224

ifconfig ens224 down
ifconfig ens224 up

Смотрим появились ли маршруты после восстановления подключения

ip route 
ip route show table all | grep 'via' | grep table
ip rule show

Создаем скрипт iptables

mcedit /etc/iptables.sh
int_if=ens160
ext_if_backup=ens192
ext_if_main=ens224
localnet=192.168.150.0/24

iptables -P INPUT ACCEPT
iptables --flush INPUT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $int_if -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $int_if -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i $int_if -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -m state --state NEW -j DROP

iptables -P OUTPUT ACCEPT
iptables --flush OUTPUT
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -o lo -j ACCEPT

iptables -P FORWARD ACCEPT
iptables --flush FORWARD
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A FORWARD -s $localnet -i $int_if -j ACCEPT
iptables -A FORWARD -m state --state NEW -j DROP

iptables -t nat --flush
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat --flush POSTROUTING
iptables -t nat -A POSTROUTING -s $localnet -o $ext_if_backup -j MASQUERADE
iptables -t nat -A POSTROUTING -s $localnet -o $ext_if_main -j MASQUERADE

Запускаем iptables.sh

sh /etc/iptables.sh

Добавляем в автозагрузку (смотри ubuntu_rc.local)

mcedit /etc/rc.local
#!/bin/bash
#run ip forwarding
sysctl -w net.ipv4.ip_forward=1
#ip route смотри в /etc/networkd-dispatcher/routable.d/10-add-routes.sh
#run iptables
/etc/iptables.sh
exit 0

Проверка с помощью netplan
Добавляем ip в netplan, убираем маршрут по умолчанию

mcedit /etc/netplan/config.yaml
network:
  ethernets:
    ens160:
      dhcp4: no
      addresses:
        - 192.168.150.170/24
        - 192.168.150.171/24
    ens192:
      dhcp4: no
      addresses:
        - 89.89.89.161/28
    ens224:
      dhcp4: no
      addresses:
        - 212.212.212.70/29
      #routes:
        #- to: default
         # via: 212.212.212.65

Проверяем после применения отредактированной сетевой конфигурации через netplan

netplan apply

После изменения ip
интерфейс подключается заново и
маршруты могут очищаться,
проверяем восстановились ли они, после
восстановления интерфейса

ip route 
ip route show table all | grep 'via' | grep table
ip rule show

Проверяем после перезагрузки системы

init 6

Еще раз проверяем восстановились ли маршруты

ip route 
ip route show table all | grep 'via' | grep table
ip rule show
ubuntu_iptables_iproute_netpaln.txt · Last modified: 2024/10/24 08:57 by admin