commit
This commit is contained in:
1 parent
a6869cb8d7
commit
c35a244d40
2 files changed
+114
No files matched your search
@@ -0,0 +1,67 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Este script implementa otimização de MTU para WireGuard sem depender de XDP
|
||||||
|
# já que o carregamento do programa XDP falhou devido a limitações no verificador de limites
|
||||||
|
|
||||||
|
echo "Aplicando otimizações manuais de MTU para WireGuard..."
|
||||||
|
|
||||||
|
# 1. Configurar MTU ótimo para WireGuard
|
||||||
|
echo "Configurando MTU ótimo para WireGuard..."
|
||||||
|
ip link set dev wg0 mtu 1420
|
||||||
|
echo "MTU da interface wg0 configurado para 1420"
|
||||||
|
|
||||||
|
# 2. Configurar TCP MSS clamping via iptables para prevenir fragmentação
|
||||||
|
echo "Configurando TCP MSS Clamping..."
|
||||||
|
iptables -t mangle -F FORWARD
|
||||||
|
iptables -t mangle -A FORWARD -o wg0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1380
|
||||||
|
iptables -t mangle -A FORWARD -i wg0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1380
|
||||||
|
echo "TCP MSS ajustado para 1380 para pacotes passando pelo WireGuard"
|
||||||
|
|
||||||
|
# 3. Ajustar opções de kernel para melhorar o tratamento de MTU e fragmentação
|
||||||
|
echo "Ajustando parâmetros de kernel para PMTU e fragmentação..."
|
||||||
|
sysctl -w net.ipv4.tcp_mtu_probing=1
|
||||||
|
sysctl -w net.ipv4.ip_no_pmtu_disc=0
|
||||||
|
echo "net.ipv4.tcp_mtu_probing = 1" >> /etc/sysctl.conf
|
||||||
|
echo "net.ipv4.ip_no_pmtu_disc = 0" >> /etc/sysctl.conf
|
||||||
|
sysctl -p
|
||||||
|
|
||||||
|
# 4. Priorizar tráfego WireGuard no QoS
|
||||||
|
echo "Configurando QoS para priorizar pacotes WireGuard..."
|
||||||
|
# Verificar se já existe regra para não duplicar
|
||||||
|
if ! tc filter show dev enp0s6 parent 1: | grep -q "match ip protocol 17.*match ip dport 32100"; then
|
||||||
|
tc filter add dev enp0s6 parent 1: protocol ip prio 1 u32 \
|
||||||
|
match ip protocol 17 0xff \
|
||||||
|
match ip dport 32100 0xffff \
|
||||||
|
flowid 1:10
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 5. Configurar o sysctl drop_path_mtu para garantir que o kernel ajuste o MTU adequadamente
|
||||||
|
sysctl -w net.ipv4.ip_forward_use_pmtu=1
|
||||||
|
echo "net.ipv4.ip_forward_use_pmtu = 1" >> /etc/sysctl.conf
|
||||||
|
|
||||||
|
# 6. Adicionar um monitoramento básico de fragmentação
|
||||||
|
echo "Configurando monitoramento de fragmentação..."
|
||||||
|
cat > /etc/cron.daily/check_ip_frag << 'EOF'
|
||||||
|
#!/bin/sh
|
||||||
|
# Monitorar estatísticas de fragmentação IP
|
||||||
|
echo "=== Estatísticas de Fragmentação $(date) ===" >> /var/log/ip_frag_stats.log
|
||||||
|
grep . /proc/net/snmp | grep -A 1 "^Ip" >> /var/log/ip_frag_stats.log
|
||||||
|
echo "" >> /var/log/ip_frag_stats.log
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x /etc/cron.daily/check_ip_frag
|
||||||
|
|
||||||
|
# 7. Mostrar informações atuais
|
||||||
|
echo ""
|
||||||
|
echo "=== Otimização de MTU para WireGuard aplicada com sucesso ==="
|
||||||
|
echo "Informações da interface WireGuard:"
|
||||||
|
ip link show wg0 | grep mtu
|
||||||
|
echo ""
|
||||||
|
echo "Regras de TCP MSS clamping:"
|
||||||
|
iptables -t mangle -L FORWARD -v -n | grep TCPMSS
|
||||||
|
echo ""
|
||||||
|
echo "Esta solução irá:"
|
||||||
|
echo "- Prevenir fragmentação usando MTU 1420 e TCP MSS 1380"
|
||||||
|
echo "- Melhorar Path MTU Discovery para conexões mais estáveis"
|
||||||
|
echo "- Priorizar tráfego WireGuard no QoS"
|
||||||
|
echo "- Monitorar fragmentação para ajustes futuros"
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# Diagnóstico da Falha de Carregamento do XDP
|
||||||
|
|
||||||
|
Analisando o erro de carregamento do programa XDP `xdp_wg_mtu_optimizer.o`, identifiquei os seguintes problemas:
|
||||||
|
|
||||||
|
## Principal erro detectado
|
||||||
|
|
||||||
|
```
|
||||||
|
invalid access to packet, off=34 size=1, R1(id=3,off=34,r=34)
|
||||||
|
R1 offset is outside of the packet
|
||||||
|
```
|
||||||
|
|
||||||
|
O verificador de BPF está detectando um acesso inválido à memória do pacote. O programa tenta acessar dados além dos limites verificáveis pelo verificador estático do BPF.
|
||||||
|
|
||||||
|
## Causas prováveis
|
||||||
|
|
||||||
|
1. **Verificação de limites inadequada**: Quando processamos opções TCP, o verificador BPF não consegue comprovar estaticamente que todos os acessos estão dentro dos limites do pacote.
|
||||||
|
|
||||||
|
2. **Problema de alinhamento de ponteiros**: O código usa vários tipos de ponteiros (IPv4, TCP, opções TCP) com diferentes deslocamentos que estão causando confusão no verificador.
|
||||||
|
|
||||||
|
3. **Análise estática limitada**: O verificador BPF não consegue seguir todas as ramificações do código para garantir que os acessos sejam seguros.
|
||||||
|
|
||||||
|
## Soluções possíveis para implementação XDP futura
|
||||||
|
|
||||||
|
Para implementar o código XDP para otimização de MTU no futuro, considere estas abordagens:
|
||||||
|
|
||||||
|
1. **Simplificação do programa**: Reduzir a complexidade, especialmente no processamento de opções TCP.
|
||||||
|
|
||||||
|
2. **Bounds checking explícito**: Adicionar mais verificações de limites explícitas antes de acessar os campos:
|
||||||
|
|
||||||
|
```c
|
||||||
|
if ((void *)(tcp_opt_ptr + 4) <= data_end && tcp_opt_ptr + 4 <= tcp_opt_end) {
|
||||||
|
// Agora é seguro acessar tcp_opt_ptr[0], tcp_opt_ptr[1], etc.
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Uso de loops fixos**: O verificador BPF tem problemas com loops que não são estáticos. Use unroll forçado:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#pragma unroll
|
||||||
|
for (int i = 0; i < 4; i++) { // Número fixo pequeno de iterações
|
||||||
|
// código do loop
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Versão do kernel**: Considere atualizar o kernel para obter um verificador BPF mais recente que pode lidar melhor com estas verificações.
|
||||||
|
|
||||||
|
5. **Técnica de CO-RE (Compile Once Run Everywhere)**: Use abordagens mais modernas de BPF com BTF para melhorar a portabilidade e verificação.
|
||||||
Reference in new issue
Block a user