В последнее время я много экспериментировал с WireGuard и немного запутался, как именно работают правила FastTrack. Детали моей настройки тут. Кроме того, я реализовал MSS clamping, как описано здесь. В итоге соединение работает, но TCP-соединения очень долго инициализируются и начинают передавать данные. Это видно в сетевом мониторе Firefox — длительное ожидание (5-50 секунд) перед началом получения данных. При этом, как только данные начинают приходить, всё работает быстро, и загрузка обычно занимает несколько миллисекунд.
Я смог решить проблему, отключив правило FastTrack в цепочке forward. Меня смущает, почему это изначально не работало.
Рассмотрим следующие правила файрвола:
[admin@MikroTik] > /ip/firewall/filter/print
Flags: X - отключено, I - неверно; D - динамическое
0 D ;;; специальное пустое правило для отображения счётчиков fasttrack
chain=forward action=passthrough
1 ;;; FastTrack
chain=forward action=fasttrack-connection hw-offload=no connection-state=established,related
2 ;;; Established, Related
chain=forward action=accept connection-state=established,related
<сокращено для краткости>
[admin@MikroTik] > /ip/firewall/mangle/print
Flags: X - отключено, I - неверно; D - динамическое
0 D ;;; специальное пустое правило для отображения счётчиков fasttrack
chain=prerouting action=passthrough
1 D ;;; специальное пустое правило для отображения счётчиков fasttrack
chain=forward action=passthrough
2 D ;;; специальное пустое правило для отображения счётчиков fasttrack
chain=postrouting action=passthrough
3 chain=prerouting action=mark-connection new-connection-mark=pia_wireguard_conn src-address=192.168.0.0/16 dst-address=!192.168.0.0/16 connection-mark=no-mark
4 chain=prerouting action=mark-routing new-routing-mark=routes-pia src-address=192.168.0.0/16 connection-mark=pia_wireguard_conn
5 chain=forward action=change-mss new-mss=clamp-to-pmtu passthrough=yes tcp-flags=syn protocol=tcp routing-mark=routes-pia
Как видно, у меня есть два правила mangle для маркировки VPN-трафика и ещё одно для ограничения MSS. Кроме того, есть общее правило FastTrack в цепочке forward. Пока вроде всё нормально.
Теперь, согласно официальной документации (здесь):
3. Пакет попадает в процесс forward;
a. проверяется TTL;
b. пакет обрабатывается в цепочке Mangle forward;
c. пакет обрабатывается в цепочке Filter forward;
d. пакет отправляется на учёт;
Если я правильно понимаю, поскольку пакет проходит через Mangle forward перед Filter forward, MSS должен ограничиваться до того, как применяется FastTrack.
Тем не менее, описанные выше проблемы есть.
Если я отключаю правило FastTrack в цепочке forward (через /ip/firewall/filter/set disabled=yes 1), всё работает как надо, без задержек.
Короче, почему так происходит? Где в моём понимании этого процесса зарыта ошибка?
Я смог решить проблему, отключив правило FastTrack в цепочке forward. Меня смущает, почему это изначально не работало.
Рассмотрим следующие правила файрвола:
[admin@MikroTik] > /ip/firewall/filter/print
Flags: X - отключено, I - неверно; D - динамическое
0 D ;;; специальное пустое правило для отображения счётчиков fasttrack
chain=forward action=passthrough
1 ;;; FastTrack
chain=forward action=fasttrack-connection hw-offload=no connection-state=established,related
2 ;;; Established, Related
chain=forward action=accept connection-state=established,related
<сокращено для краткости>
[admin@MikroTik] > /ip/firewall/mangle/print
Flags: X - отключено, I - неверно; D - динамическое
0 D ;;; специальное пустое правило для отображения счётчиков fasttrack
chain=prerouting action=passthrough
1 D ;;; специальное пустое правило для отображения счётчиков fasttrack
chain=forward action=passthrough
2 D ;;; специальное пустое правило для отображения счётчиков fasttrack
chain=postrouting action=passthrough
3 chain=prerouting action=mark-connection new-connection-mark=pia_wireguard_conn src-address=192.168.0.0/16 dst-address=!192.168.0.0/16 connection-mark=no-mark
4 chain=prerouting action=mark-routing new-routing-mark=routes-pia src-address=192.168.0.0/16 connection-mark=pia_wireguard_conn
5 chain=forward action=change-mss new-mss=clamp-to-pmtu passthrough=yes tcp-flags=syn protocol=tcp routing-mark=routes-pia
Как видно, у меня есть два правила mangle для маркировки VPN-трафика и ещё одно для ограничения MSS. Кроме того, есть общее правило FastTrack в цепочке forward. Пока вроде всё нормально.
Теперь, согласно официальной документации (здесь):
3. Пакет попадает в процесс forward;
a. проверяется TTL;
b. пакет обрабатывается в цепочке Mangle forward;
c. пакет обрабатывается в цепочке Filter forward;
d. пакет отправляется на учёт;
Если я правильно понимаю, поскольку пакет проходит через Mangle forward перед Filter forward, MSS должен ограничиваться до того, как применяется FastTrack.
Тем не менее, описанные выше проблемы есть.
Если я отключаю правило FastTrack в цепочке forward (через /ip/firewall/filter/set disabled=yes 1), всё работает как надо, без задержек.
Короче, почему так происходит? Где в моём понимании этого процесса зарыта ошибка?
