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 / 972906
Accepted
tudor -Reinstate Monica-
tudor -Reinstate Monica-
Asked: 2019-06-26 20:17:32 +0800 CST2019-06-26 20:17:32 +0800 CST 2019-06-26 20:17:32 +0800 CST

Netplan: Roteie várias conexões paralelas à Internet com encaminhamento de porta para um único servidor com 1 porta de rede

  • 772

Aqui está o meu diagrama de rede:

        56.56.56.56 192.168.0.1/24
                    MAC:AA:BB:CC:DD:EE:01
               ___________     
            ---| Modem 1 |-------
            |  ___________      |             ___________
Internet ---|               | Switch |--------| Machine |
            |  ___________      |             ___________
            ---| Modem 2 |-------            192.168.0.3/24
               ___________     
        67.67.67.67 192.168.0.2/24
                    MAC:AA:BB:CC:DD:EE:02
  1. Ambos os modems encaminham as mesmas portas da internet para a máquina.
  2. A máquina por trás dos modems deve responder adequadamente a qualquer solicitação vinda da Internet. por exemplo, os pacotes do Modem 1 retornam pelo Modem 1, os pacotes do Modem 2 retornam pelo Modem 2.
  3. A máquina tem apenas uma porta de rede e o switch não é gerenciado.
  4. A máquina usa Netplan, iptables e iproute2 para configuração de rede.
iptables
  • 1 1 respostas
  • 1424 Views

1 respostas

  • Voted
  1. Best Answer
    tudor -Reinstate Monica-
    2019-06-26T20:17:32+08:002019-06-26T20:17:32+08:00

    Acabei obtendo minha solução do artigo e comentários em Policy Routing no Linux com base no endereço MAC do remetente e na referência Netplan.io em Policy-Routing .

    O truque é marcar e CONNTRACK os pacotes de entrada pelo endereço MAC de origem para uma tabela de roteamento separada via iptables -t mangle, e então dizer ao Netplan para usar a tabela para rotear os pacotes de saída apropriadamente.

    Primeiro, precisamos de tabelas para que nossos pacotes sejam agrupados:

    Anexe o seguinte ao arquivo /etc/iproute2/rt_tables:

    1 modem1
    2 modem2
    

    Em seguida, informe ao Netplan sobre as tabelas, rotas e marcas:

    network:
      version: 2
      ethernets:
        eth0:
          routes:
            - to: 0.0.0.0/0
              via: 192.168.0.1
              table: 1
            - to: 0.0.0.0/0
              via: 192.168.0.2
              table: 2
          routing-policy:
            - from: 0.0.0.0/0
              mark: 1
              table: 1
            - from: 0.0.0.0/0
              mark: 2
              table: 2
    

    Esta primeira parte informa netplanque os pacotes nessas diferentes tabelas precisam de rotas padrão diferentes. A segunda parte diz que alguns pacotes terão um fwmarkfrom iptables, e esses pacotes devem ser agrupados nessas tabelas.

    Em seguida, diga iptablespara marcar os pacotes pelo endereço MAC de origem, mas apenas quando não for da rede local (um pequeno script):

    #!/bin/bash -x
    MAC_MODEM1=AA:BB:CC:DD:EE:01
    MAC_MODEM2=AA:BB:CC:DD:EE:02
    MARK_MODEM1=0x1
    MARK_MODEM2=0x2
    LOCALNET=192.168.0.0/24
    
    ## Optional - Clear everything first
    iptables -t mangle -F
    
    for MODEM in MODEM1 MODEM2; do
        MAC=MAC_$MODEM
        MARK=MARK_$MODEM
        iptables --table mangle --append INPUT \
        --match state --state NEW \
        --match mac --mac-source ${!MAC} \
        ! --source $LOCALNET \
        --jump CONNMARK --set-mark ${!MARK}
    done
    iptables --table mangle --append OUTPUT \
    --jump CONNMARK --restore-mark
    

    Em seguida, diga ao netplan para gerar e aplicar:

    $ sudo netplan generate
    $ sudo netplan apply
    

    e voilá!

    RESPOSTA DE BÔNUS

    Se você tiver mais de uma rede interna (por exemplo, uma VPN via IP não local), use ipsete iptables -m set ! -match-set alias, por exemplo

    ipset destroy officenets #optional - to clear
    
    LOCALNET=192.168.0.0/24
    VPNNET=10.10.10.0/29
    
    ipset create privatenets hash:net
    ipset add privatenets $LOCALNET
    ipset add privatenets $VPNNET
    

    então no script iptables ....

        iptables --table mangle --append INPUT \
        --match state --state NEW \
        --match mac --mac-source ${!MAC} \
        -m set \
        ! --match-set privatenets src \
        --jump CONNMARK --set-mark ${!MARK}
    

    Verificação

    Verifique as regras de fwmark para rotear tabelas:

    $ ip rule
    0:  from all lookup local 
    0:  from all fwmark 0x1 lookup modem1 
    0:  from all fwmark 0x2 lookup modem2 
    32766:  from all lookup main 
    32767:  from all lookup default 
    

    Verifique o roteamento mangle do iptables:

    $ sudo iptables -t mangle -L
    ...
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    CONNMARK   all  --  anywhere             anywhere             state NEW MAC AA:BB:CC:DD:EE:01 ! source 192.168.0.1/24 CONNMARK set 0x1
    CONNMARK   all  --  anywhere             anywhere             state NEW MAC AA:BB:CC:DD:EE:02 ! source 192.168.0.2/24 CONNMARK set 0x2
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    CONNMARK   all  --  anywhere             anywhere             CONNMARK restore
    ...
    

    Verifique as rotas da tabela de saída:

    $ ip route list table modem1
    default via 192.168.0.1 dev eth0 proto static
    $ ip route list table modem2
    default via 192.168.0.2 dev eth0 proto static
    
    • 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