Вопрос или проблема
У меня есть небольшой сервер Raspberry Pi, подключенный к провайдеру openvpn и используемый в качестве VPN-шлюза. Почти все работает хорошо с помощью следующих iptables
правил:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
Однако провайдер VPN блокирует трафик NTP (udp порт 123).
Как мне заставить iptables маршрутизировать весь трафик NTP через основной шлюз (который равен 192.168.1.1 на eth0)?
Политическая маршрутизация на помощь. На вашем RPi выполните следующее от имени root:
# echo 100 direct >> /etc/iproute2/rt_tables
# ip rule add fwmark 123 table direct
# ip route add default via 192.168.1.1 dev eth0 table direct
# iptables -t mangle -A OUTPUT -p udp --dport 123 -j MARK --set-mark 123
Ответ или решение
Для решения проблемы с перенаправлением NTP-трафика на маршрутизатор по умолчанию вместо туннеля VPN на вашем сервере Raspberry Pi, необходимо воспользоваться механизмом полиси-роутинга. Ваши текущие правила iptables позволяют корректно обрабатывать большинство трафика, но NTP (UDP порт 123) блокируется вашим VPN-провайдером. Ниже приведены пошаговые инструкции по настройке маршрутизации:
Шаг 1: Добавление новой таблицы маршрутизации
Сначала нужно добавить новую таблицу маршрутизации, которая будет использоваться для NTP-трафика. Откройте командную строку и выполните следующую команду:
echo 100 direct >> /etc/iproute2/rt_tables
Шаг 2: Настройка правила маршрутизации
Затем необходимо создать правило, которое позволит пометить пакеты с определённым маркером для маршрутизации через вашу новую таблицу:
ip rule add fwmark 123 table direct
Шаг 3: Определение маршрута по умолчанию
Теперь добавьте маршрут по умолчанию для новой таблицы маршрутизации, указывая шлюз в локальной сети:
ip route add default via 192.168.1.1 dev eth0 table direct
Шаг 4: Настройка IPTables для маркирования NTP-трафика
Далее необходимо настроить правила iptables, чтобы маркировать UDP-трафик, предназначенный для порта 123:
iptables -t mangle -A OUTPUT -p udp --dport 123 -j MARK --set-mark 123
Итоговая настройка
Теперь ваши маршруты должны быть настроены следующим образом:
- Трафик по UDP порту 123 будет помечен маркером 123.
- Правило маршрутизации будет перенаправлять этот помеченный трафик через таблицу маршрутизации
direct
, что позволит избежать туннеля VPN и использовать вместо этого ваш локальный маршрутизатор (192.168.1.1).
Поддержка и тестирование
После выполнения вышеуказанных шагов, рекомендуется протестировать работу NTP-сервиса. Вы можете использовать следующую команду для проверки текущего времени:
ntpdate -q pool.ntp.org
Если настройки выполнены корректно, вы увидите, что сервер запросил данные от NTP-сервера и получил ответ, не проходя через VPN.
Заключение
Следуя вышеописанным инструкциям, вы сможете успешно перенаправить NTP-трафик на ваш маршрутизатор по умолчанию, избегая препятствий от VPN-провайдера. Этот подход с использованием полиси-роутинга является эффективным решением для управления сетевым трафиком на сервере Raspberry Pi. Обязательно сохраняйте резервные копии ваших конфигураций и тестируйте изменения в контролируемой среде перед внедрением их в продакшн.