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 / unix / Perguntas / 571950
Accepted
Tenders McChiken
Tenders McChiken
Asked: 2020-03-10 04:17:29 +0800 CST2020-03-10 04:17:29 +0800 CST 2020-03-10 04:17:29 +0800 CST

Como alterar o endereço IP de origem padrão para algo diferente do endereço voltado para a rota padrão?

  • 772

Informações básicas

  • Estou usando um sistema Linux para rotear o tráfego para um pequeno bloco de endereços IPv4 públicos (habilitando o encaminhamento de IP em sysctrl.conf).
  • O roteador está se conectando ao ISP eth1usando PPPoE.
  • O endereço de peer local usado para ppp é um endereço IP configurado manualmente que foi especificado pelo ISP. O endereço do peer local é 10.0.0.10.
  • O endereço de peer remoto usado para ppp também é um endereço IP configurado manualmente que foi especificado pelo ISP. O endereço do peer local é 10.0.0.9.
  • A rota padrão do roteador é 10.0.0.9via 10.0.0.10.

  • O roteador está conectado a um switch Ethernet via eth0. eth0está configurado para usar um dos endereços públicos.

  • O switch conecta todos os outros hosts públicos. Cada host conectado usa um endereço IP público.
  10.0.0.9
ISP ----------+
              |   10.0.0.10                       X.X.X.X
              +------------- (eth1) ROUTER (eth0) --------------- SWTICH 
                                                                     |     
                                                                     +-- X.X.X.Y
                                                                     +-- X.X.X.Z
                                                                     ...

Meu problema

Tudo funciona como esperado, exceto os programas em execução no roteador. Qualquer aplicativo que eu execute no roteador usa 10.0.0.10como endereço IP de origem ao iniciar conexões com a internet. Isso é compreensível, pois eth1é onde a internet está disponível. No entanto, como o endereço não é roteável publicamente, apt, pinge outros programas não funcionam. Se eu definir explicitamente o endereço de origem nos aplicativos que o suportam (ou seja ping, ), os aplicativos funcionam.

Minha pergunta

Como posso configurar o roteador para rotear pacotes desconhecidos via eth1/ 10.0.0.9enquanto também uso o endereço IP público eth0como fonte padrão ao iniciar novas conexões?

linux networking
  • 2 2 respostas
  • 2072 Views

2 respostas

  • Voted
  1. Best Answer
    A.B
    2020-03-10T07:17:26+08:002020-03-10T07:17:26+08:00

    Nota: Vou considerar que a LAN do seu roteador é 192.0.2.0/24 e seu IP da LAN na eth0 é 192.0.2.1/24, para poder dar explicações concretas e uma solução.

    Seu ISP, para poupar alguns endereços IP públicos, atribuiu a você IPs privados para fins de roteamento interno. Tudo bem porque esse IP nunca deve ser visto do lado de fora (e seria rapidamente descartado pelo Strict Reverse Path Forwarding ao longo do caminho se alguma vez colocado no fio além do roteador ISP, ou se não, como não roteável, nunca obterá um responder). Mas isso torna sua configuração mais complexa para evitar que esse IP seja usado em todos os casos, exceto na conectividade com o ISP, do seu roteador.

    Você provavelmente tem algo semelhante a isso (pode ser um pouco diferente, não importa):

    # ip route
    default via 10.0.0.9 dev ppp0 
    10.0.0.9 dev ppp0 proto kernel scope link src 10.0.0.10 
    192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.1 
    

    É possível, por exemplo, que você tenha default via 10.0.0.9 dev ppp0 src 10.0.0.10 , ou que via 10.0.0.9nem apareça, já que é um link de camada 3 em vez de um link de camada 2, tornando viadesnecessário (mas ainda aceito). Basta adaptar as configurações abaixo de acordo.

    Atualmente, o kernel escolhe o IP aparentemente mais adequado, aquele configurado no mesmo lado para acessar a Internet, já que nada lhe diz o contrário (ou diz explicitamente para usar o IP que você não deseja):

    # ip route get 8.8.8.8
    8.8.8.8 via 10.0.0.9 dev ppp0 src 10.0.0.10 uid 0 
        cache 
    

    Você só precisa substituir o comportamento de roteamento quando o kernel verificar como acessar a Internet e indicar um endereço IP de origem preferencial específico. Esteja ciente de que você pode perder a conectividade em caso de erros e problemas imprevistos. Tenha acesso alternativo (console), se possível:

    # ip route replace default via 10.0.0.9 dev ppp0 src 192.0.2.1
    # ip route get 8.8.8.8
    8.8.8.8 via 10.0.0.9 dev ppp0 src 192.0.2.1 uid 0 
        cache 
    

    É isso, seu roteador irá rotear como de costume, mas quando precisar escolher um IP de saída originado localmente, selecionará 192.0.2.1 a menos que explicitamente informado de outra forma (ex: processo vinculando explicitamente o IP de origem em seu soquete).

    Esta rota deve ser definida novamente cada vez que o link é desconectado e depois ativado. Cabe a você integrar isso em algum script pppoe, após o link estar totalmente estabelecido.

    Observe também que o nome da interface ppp0 pode mudar para ppp1 ou qualquer outro nome. Cabe a você lidar com isso em seus scripts de configuração.


    Métodos alternativos para definir esta mesma configuração de rota:

    1. adicionar uma métrica inferior, quando uma métrica é definida inicialmente

    Se a métrica original foi definida (ou seja, não era 0, digamos que era 100), você pode adicionar uma rota padrão alternativa com uma métrica menor em vez de substituir a anterior:

        # ip route add default via 10.0.0.9 dev ppp0 src 192.0.2.1 metric 50
    
    1. regra de roteamento dedicada

    Se você tem medo da interação de várias ferramentas envolvidas no pppoe que podem remover a rota acima, você pode instalar essa configuração em uma tabela de roteamento alternativa e dar a ela precedência nas regras de roteamento, com uma cópia parcial da tabela principal para evitar interrupções. Isso ainda terá que ser refeito após cada desconexão/reconexão, pois a rota ainda desaparecerá. Aqui iif loé especial e realmente significa "pacote de saída originado localmente" em vez de entrada, e 109 é um valor de tabela escolhido arbitrário:

        # ip rule add iif lo lookup 109 # needed only once
        # ip route add table 109 10.0.0.9 dev ppp0 proto kernel scope link src 10.0.0.10 # to keep using 10.0.0.10 for local link, just in case
        # ip route add table 109 192.0.2.0/24 dev eth0 src 192.0.2.1 # will disappear if eth0 is brought down
        # ip route add table 109 default via 10.0.0.9 dev ppp0 src 192.0.2.1 # will disappear if ppp0 is brought down
    

    Se você adicionou outras entradas de roteamento na tabela principal, é provável que também tenha que copiá-las acima.

        # ip route get 8.8.8.8
        8.8.8.8 via 10.0.0.9 dev ppp0 table 109 src 192.0.2.1 uid 0 
            cache 
    
    • 2
  2. WGRM
    2020-03-10T06:26:25+08:002020-03-10T06:26:25+08:00

    Assim como você disse. Os outros clientes no switch com seu roteador como gateway possuem endereços IP públicos. Seu roteador não. Ele tem um endereço de LAN que não será roteado. Como seu provedor de serviços de Internet NÃO forneceu um endereço público, o roteador NÃO poderá sair.

    Se você tiver outro ip público, crie uma configuração de eth virtual na eth1 e roteie-a corretamente. Então seu roteador pode sair também.

    • 0

relate perguntas

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Roteador estranho funciona com centos 6 [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk 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