LINUX.ORG.RU
ФорумAdmin

Низкая пропускная способность в схеме Wireguard -> NAT -> Wireguard

 ,


1

2

Всем привет! Столкнулся с такой проблемой, которую реально не понимаю как траблшутить правильно.

Есть сервак, у которого два интерфейса: wg0, к нему цепляются конечные клиенты (лэптопы, телефоны, итд), и wg1, который является туннелем к стороннему VPN.

Весь трафик сервера маршрутом по умолчанию выходит в интернет через wg1:

~ ip route get 8.8.8.8
8.8.8.8 dev wg1 table 51820 src 10.13.128.233 uid 0

Добавлен NAT:

iptables -t nat -A POSTROUTING -o wg1 -j MASQUERADE

Итого, схема получается такая:

(конечные юзеры) ----> wg0 ----> (сервер) ----> NAT ----> wg1 ----> (3rd-party VPN) ----> интернет

Конфиги WireGuard супер-примитивные, на всех прописаны только ключи и адреса.

В чем проблема: на конечных клиентах скорость по замерам на fast.com и SpeedTest — около 20-30 Мбит. Сначала грешил на перфоманс либо wg0 туннеля, либо wg1, но:

  • Тест скорости с сервера (у которого весь исходящий идет через wg1), показал гигабит на fast.com / SpeedTest
  • Тест iperf с клиента до сервера (wg0) показал уверенные 100 Мбит

Итого выходит, что оба туннеля работают отлично, а скорость теряется где-то на маршрутизации / NAT / чем-то еще, когда трафик роутится/натится по цепочке выше.

Буду признателен крайне вообще любым советам, наводкам и комментариям, нахожусь в некотором тупике.

Ответ на: комментарий от Anoxemian

Без -j MASQUERADE конечный пользователь не сможет выходить в интернет, у него приватный IP в сетке интерфейса wg0. Без этого правила его трафик в интернет не идет, и вот почему:

  • Клиенты подключаются к серваку через wg0, и получают IP в сетке 172.26.0.0/16
  • Сервак выходит в интернет через wg1, он у него дефолтный маршрут, соответственно на этом интерфейсе у него есть свой IP, скажем 10.13.128.233/24

Так вот, шлюз на интерфейсе wg1, который уже на стороне VPN-провайдера, не в курсе сетки 172.26.0.0/16, а только в курсе сети 10.13.128.0/24, соответственно приватную сетку 172.26.0.0/16 придется замаскировать за NAT, чтобы трафик ходил.

four-two-two
() автор топика
Ответ на: комментарий от four-two-two

ты меня не понял. избавься от дебильного -j клоунад, используй нат по назначению -j SNAT и замерь скорость.

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

А блин, не так понял реально. Поменял на:

iptables -t nat -A POSTROUTING -o wg1 -j SNAT --to 10.13.128.233

Перфоманс не поменялся, те же результаты на конечных девайсах по скорости

four-two-two
() автор топика
Ответ на: комментарий от Anoxemian

Если дашь наводку, буду признателен, в tcpdump видно довольно много TCP Dup ACK, TCP Out-Of-Order, TCP Fast Retransmission, как понять есть ли фрагментация моих знаний не хватает :)))

four-two-two
() автор топика

Протестируй клиент-wg0-интернет, а не iperf.

Bers666 ★★★★★
()
Ответ на: комментарий от four-two-two

Так тот же iperf3 показывает в колонке Retr. Запусти на клиенте до конечной точки wg1. Если там ненулевые значения, значит оно.

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

@Anoxemian @Bers666 круто! Низкий поклон за наводки, попадание в точку. Про Retr не знал, пошло в копилку знаний.

iperf показывает дофига ретрансмишенов, причем как в тестах client -> wg0 -> iperf server, так и в тестах client -> wg0 -> server -> wg1 -> iperf server

client -> wg0 -> server -> wg1 -> iperf server:

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.17  sec  34.0 MBytes  4.74 Mbits/sec  180             sender
[  5]   0.00-60.00  sec  34.0 MBytes  4.75 Mbits/sec                  receiver

client -> wg0 -> iperf server:

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.18  sec  57.8 MBytes  8.06 Mbits/sec  229             sender
[  5]   0.00-60.00  sec  57.5 MBytes  8.05 Mbits/sec                  receiver

Пошел гуглить, как с этим бороться, если будут какие советы или наводки, опять таки буду оч благодарен.

four-two-two
() автор топика
Ответ на: комментарий от Anoxemian

Это выставил, ситуация никак не поменялась

iperf3 от клиента в интернет через два туннеля выглядит так:

[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   219 KBytes  1.79 Mbits/sec    0   53.4 KBytes       (omitted)
[  5]   0.00-1.00   sec  1.10 MBytes  9.26 Mbits/sec   13    184 KBytes       
[  5]   1.00-2.00   sec  0.00 Bytes  0.00 bits/sec   85   85.5 KBytes       
[  5]   2.00-3.00   sec   377 KBytes  3.09 Mbits/sec   17   64.1 KBytes       
[  5]   3.00-4.00   sec   314 KBytes  2.57 Mbits/sec    5   68.1 KBytes       
[  5]   4.00-5.00   sec  0.00 Bytes  0.00 bits/sec    9   50.8 KBytes       
[  5]   5.00-6.00   sec   314 KBytes  2.57 Mbits/sec    0   56.1 KBytes       
[  5]   6.00-7.00   sec  0.00 Bytes  0.00 bits/sec    0   57.4 KBytes       
[  5]   7.00-8.00   sec  0.00 Bytes  0.00 bits/sec    0   57.4 KBytes       
[  5]   8.00-9.00   sec   314 KBytes  2.57 Mbits/sec    0   58.8 KBytes       
[  5]   9.00-10.00  sec  0.00 Bytes  0.00 bits/sec    0   65.5 KBytes       
[  5]  10.00-11.00  sec   314 KBytes  2.57 Mbits/sec    3   48.1 KBytes       
[  5]  11.00-12.00  sec  0.00 Bytes  0.00 bits/sec    1   50.8 KBytes       
[  5]  12.00-13.00  sec  0.00 Bytes  0.00 bits/sec    3   49.4 KBytes       
[  5]  13.00-14.00  sec   314 KBytes  2.57 Mbits/sec    0   57.4 KBytes       
[  5]  14.00-15.00  sec  0.00 Bytes  0.00 bits/sec    0   60.1 KBytes       
[  5]  15.00-16.00  sec   314 KBytes  2.57 Mbits/sec    0   60.1 KBytes       
[  5]  16.00-17.00  sec  0.00 Bytes  0.00 bits/sec    0   60.1 KBytes       
[  5]  17.00-18.00  sec   314 KBytes  2.57 Mbits/sec    0   64.1 KBytes       
[  5]  18.00-19.00  sec  0.00 Bytes  0.00 bits/sec    0   73.5 KBytes       
[  5]  19.00-20.00  sec   314 KBytes  2.57 Mbits/sec    0   96.2 KBytes       
[  5]  20.00-20.32  sec  0.00 Bytes  0.00 bits/sec    0    103 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-20.32  sec  3.92 MBytes  1.62 Mbits/sec  136             sender

Пока пробую играться с MTU, но чет что в лоб, что по лбу

four-two-two
() автор топика
Ответ на: комментарий от four-two-two

Совет простой, начни с mtu 1280 и половинками увеличивайся, скорее всего у тебя в цепочке есть инкапсуляция о которой ты не в курсе

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

Спасибо большое за помощь и советы, буду пробовать.

four-two-two
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.