AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1171907
Accepted
barmanthewise
barmanthewise
Asked: 2025-01-30 12:10:13 +0800 CST2025-01-30 12:10:13 +0800 CST 2025-01-30 12:10:13 +0800 CST

O contêiner Wireguard não permite verificações de integridade no contêiner sidecar

  • 772

Preciso expor um serviço Wireguard no Kubernetes por meio de um AWS Network Load Balancer.

O Load Balancer não roteia tráfego para meu pod wireguard a menos que as verificações de integridade sejam aprovadas. Como os AWS Load Balancers não oferecem suporte a verificações de integridade UDP, e o wireguard é executado em UDP, anexei um serviço TCP simples ao pod wireguard, mas ele não pode ser alcançado e, portanto, falha nas verificações de integridade.

Aqui está o snippet de especificação de implantação do yaml relevante.

    spec:
      containers:
        - name: "wireguard"
          image: "linuxserver/wireguard:latest"
          ports:
            - containerPort: 51820
              protocol: UDP
          securityContext:
            privileged: true
            capabilities:
              add:
                - NET_ADMIN
        - name: healthcheck
          image: istio/tcp-echo-server:latest
          imagePullPolicy: IfNotPresent
          args: [ "9000", "hello" ]
          ports:
          - containerPort: 9000

Se eu deixar de fora o contêiner wireguard ou comentar a parte NET_ADMIN, garantindo assim que nenhuma configuração de rede seja alterada, posso acessar com sucesso o pod heathcheck, executando, por exemplo:

kubectl run -i --rm --restart=Never dummy --image=busybox -- sh -c "echo world | nc wireguard-service.wg-test 9000"
hello world

Nos logs do contêiner do wireguard, posso ver esses comandos sendo executados. Suspeito que algo na configuração de roteamento do nó seja alterado para que a porta 9000 se torne inacessível.

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.11.0.1/16 dev wg0
[#] ip link set mtu 1450 up dev wg0
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
[#] sysctl -w -q net.ipv4.ip_forward=1

Tentei adicionar iptables -A INPUT -p tcp --dport 9000 -j ACCEPTe iptables -A FORWARD -p tcp --dport 9000 -j ACCEPTnão adiantou. O que estou esquecendo aqui?

iptables
  • 1 1 respostas
  • 49 Views

1 respostas

  • Voted
  1. Best Answer
    Justin Ludwig
    2025-02-11T04:55:24+08:002025-02-11T04:55:24+08:00

    Quando você usa o wg-quick com AllowedIPs = 0.0.0.0/0(como seu contêiner WireGuard usa), o wg-quick configurará uma tabela de roteamento personalizada com algumas regras de roteamento de políticas personalizadas para rotear todo o tráfego IPv4 (exceto o tráfego do próprio WireGuard e pacotes que correspondem a rotas explícitas na tabela principal) através do túnel WireGuard.

    Como você não quer rotear respostas do seu serviço healthcheck pelo túnel WireGuard, você precisa configurar sua própria regra de roteamento de política personalizada no pod para substituir as regras do wg-quick. Uma regra como a seguinte deve resolver o problema:

    ip rule add sport 9000 ipproto tcp table main priority 100
    

    Como essa regra tem um valor de prioridade menor (100) do que as regras que o wg-quick configura, ela será avaliada antes delas (as regras do wg-quick são configuradas sem valores de prioridade explícitos, então elas serão prioridades atribuídas automaticamente na casa dos 32000s). Essa regra corresponderá aos pacotes enviados da porta TCP 9000 do seu serviço de healthcheck e usará a tabela de roteamento principal do pod para roteá-los.

    • 3

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve