Jump to content
Калькуляторы

FreeBSD, change MSS

Подскажите эффективный способ подстраивать TCP MSS в проходящем через gre-туннель трафике для FreeBSD,

для Linux и iptables это выглядит вот так -j TCPMSS --clamp-mss-to-pmtu.

Включил в pf, scrub on gre0 fragment reassemble max-mss 1436, но к сожалению, не помогло, возможно, потому что все правила ниже без keep state.

Пробовал ng_tcpmss, трафик через ноду проходит, эффекта нет.

16:32:13.275214 IP 193.106.144.36.4372 > 193.0.6.139.80: S 2105092612:2105092612(0) win 65535 <mss 1436,nop,nop,sackOK>
16:32:13.322461 IP 193.0.6.139.80 > 193.106.144.36.4372: S 2148163758:2148163758(0) ack 2105092613 win 5840 <mss 1460,nop,nop,sackOK>
16:32:13.322721 IP 193.106.144.36.4372 > 193.0.6.139.80: . ack 1 win 65535
16:32:13.323908 IP 193.106.144.36.4372 > 193.0.6.139.80: P 1:429(428) ack 1 win 65535

Share this post


Link to post
Share on other sites

а как трафик на ng_tcpmss направляете?

 

Edited by marikoda

Share this post


Link to post
Share on other sites

посмотри на программу tcpmssd

 

tcpmssd -p 8670 -m 1396
ipfw add 1 divert 8670 all from any to any via ng\*

Share this post


Link to post
Share on other sites

marikoda, так, как советовалось в мане

kldload ng_ipfw
kldload ng_tcpmss

ngctl mkpeer ipfw: tcpmss 100 qqq
ngctl msg ipfw:100 config '{ inHook="qqq" outHook="qqq" maxMSS=1436 }'
ipfw add 300 netgraph 100 tcp from any to any tcpflags syn via gre0
sysctl net.inet.ip.fw.one_pass=0

 

wed, перенаправлять весь трафик в юзерспейс не считаю хорошей идеей, может пострадать производительность.

Edited by mr.Scamp

Share this post


Link to post
Share on other sites
Включил в pf, scrub on gre0 fragment reassemble max-mss 1436, но к сожалению, не помогло, возможно, потому что все правила ниже без keep state.
Скруб - это отдельная категория правил, как и нат.

Выполняется только одно скруб правило, первое под которое попал трафик.

Те траффик не будет проходить через все нормализации, только через одну.

Убедитесь что у вас scrub только один трафик через него проходит.

Возможно нужно добавить proto tcp к правилу.

 

 

Ещё можно использовать ng_tcpmss, если умеете с нетграфом работать.

Через неё нужно пропускать весь траффик, предварительно сконфигурировав: связать два хука в оба направления и мсс задать.

Share this post


Link to post
Share on other sites

Вспомнил. может понадобится.

 

Когда-то давно была задача забриджевать ethernet со стандартным mtu 1500 через линк с маленьким mtu.

Тогда пользовались vtund поверх tcp или udp, с одной стороны был linux, с другой - freebsd.

Работало, на удивление, неплохо.

Edited by marikoda

Share this post


Link to post
Share on other sites

%sudo pfctl -vvsr | head
@0 scrub on gre0 proto tcp all no-df max-mss 1436 fragment reassemble
  [ Evaluations: 8443501   Packets: 657112    Bytes: 103976377   States: 0     ]

не помогает.

ng_tcpmss пробовал, см. выше.

Share this post


Link to post
Share on other sites

Поставьте 576.

Может у вас где то дальше мту ещё падает и ицмп заблочен.

 

ПФ на работоспособность не проверял этот функционал, а вот нода 100% работает.

Share this post


Link to post
Share on other sites

Спасибо за совет!

Поставил 576 - все заработало.

Опытным путем установил, что максимальный MSS для этого линка равен 1396.

Как pf scrub, так и ng-нода работают отлично.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this