Especificando o endereço IP para conexões de saída em um host multi-ip

15

um dos meus servidores (Debian 5.0.6) possui dois endereços IP públicos na mesma interface. Isso costumava funcionar bem por meses, mas de repente estava usando endereços IP "incorretos" para conexões de saída. Isso é um problema, porque a pesquisa inversa não corresponde e, portanto, os e-mails recebem pontos de spam.

eth0      Link encap:Ethernet  Hardware Adresse 00:1b:21:14:8e:9c  
          inet Adresse:81.169.180.51  Bcast:81.169.180.51  Maske:255.255.255.255
          inet6-Adresse: fe80::21b:21ff:fe14:8e9c/64 Gültigkeitsbereich:Verbindung

eth0:0    Link encap:Ethernet  Hardware Adresse 00:1b:21:14:8e:9c  
          inet Adresse:85.214.157.120  Bcast:85.214.157.120  Maske:255.255.255.255


Kernel-IP-Routentabelle
Destination     Router          Genmask         Flags Metric Ref    Use Iface
81.169.180.1    0.0.0.0         255.255.255.255 UH    0      0        0 eth0
0.0.0.0         81.169.180.1    0.0.0.0         UG    0      0        0 eth0

Atualmente, ele está usando 85.214.157.120 para conexões de saída. Como faço para usar o 81.169.180.51?

Editar : a máscara de rede 255.255.255.255 é consistente com a documentação e a resposta DHCP da empresa de hospedagem. Chamar /etc/init.d/networking restart várias vezes acabará com o endereço IP correto para conexões de saída de saída. Mas isso obviamente não é uma solução estável. /Editar

Editar 2 : para garantir que a rota do host não esteja relacionada ao meu problema, configurei uma rede de teste local:

eth0      inet Adresse:192.168.0.2  Bcast:192.168.0.255  Maske:255.255.255.0
eth0:0    inet Adresse:192.168.0.3  Bcast:192.168.0.255  Maske:255.255.255.0

192.168.0.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0        192.168.0.1     0.0.0.0         UG    0      0        0 eth0

Se alguém tiver uma idéia de como garantir que o endereço IP de origem 192.168.0.2 seja usado nas conexões TCP de saída, ficaria muito grato. / Editar 2

Hendrik Brummermann
fonte

Respostas:

24

Padrão de atualização:

ip route change default via 81.169.180.1 src 81.169.180.51

Verifique a configuração:

ip route list
bindbn
fonte
1
Como tornar isso permanente após a reinicialização?
Dezhi
3

A resposta de bindbn é boa, mas encontrei algumas complicações.

1) Você deve verificar a "lista de rotas IP", como diz o bindbn. Algumas outras regras da lista podem ter precedência sobre a rota padrão. Pode ser necessário excluir essa regra ou criar uma regra ligeiramente diferente.

2) Todas as alterações feitas pelo comando ip funcionam apenas até a próxima reinicialização. Esta resposta A adição permanente de regras de roteamento da política de origem explica como torná-la persistente.

Em resumo, você pode adicionar o comando ip route para executar como uma linha "up" ou "post-up" em / etc / network / interfaces. Você pode adicionar uma linha "inativa" correspondente para remover a rota.

AdamS
fonte
1

Tente mudar

 allow-hotplug eth0

para

 auto eth0

Isso deve forçar sua interface física a aparecer primeiro. Você pode ou não precisar alterar a entrada de permissão de hotplug para eth0: 0 também.

Bill B
fonte
1

Por curiosidade, por que seus endereços IP têm uma máscara de rede 255.255.255.255? Isso realmente não é viável, pois significaria que todo o endereço é a rede. Não há espaço para anfitriões. O fato de seu endereço de transmissão ser o mesmo do IP do host também é preocupante, mas provavelmente devido ao problema da máscara de rede. Parece que sua máscara de rede deve ser 255.255.255.0.

Isso foi feito para fornecer a você dois hosts na mesma sub-rede? Pode ser preferível simplesmente fazer uma alteração para que cada interface esteja em uma sub-rede diferente. 255.255.255.128 colocaria eth0 e seu gateway (de 81.169.180.1) na mesma sub-rede, com eth0: 0 em uma sub-rede separada. No entanto, isso significaria que eth0 só poderia se comunicar com 81.169.180.1-81.169.180.127. E eth0: 0 indo de 129-254. Mas, dito isso, não consigo entender por que a sua configuração atual funciona.

Agora, isso causará os problemas que você está vendo acima? Não consigo ver um link direto, mas é possível.
Certamente é algo que eu ajustaria. Se isso não ajudar, talvez você possa explicar por que as coisas estão sendo configuradas dessa maneira.


Edit: Isso funcionava bem neste host ou era uma máquina / sistema operacional diferente? Alguma idéia do que pode ter mudado? A razão pela qual pergunto é porque o Linux realmente não gosta de ter duas interfaces na mesma sub-rede. Isso me enlouqueceu ao tentar fazer isso funcionar em minha própria rede. Parece bem possível que você tenha funcionado com o IP certo, até reiniciar / reiniciar os serviços de rede. Então surgiu usando a interface errada. Referência: http://anders.com/cms/258

Você também pode tentar ifdowneth0: 0, adicionar a rota e ifupvoltar a usá-la. Isso pode garantir que o IP correto seja usado.

A adição manual de dev eth0 pode ajudar, mas parece que a rota foi feita corretamente.


Edição adicional: Você pode tentar usar as mais recentes ferramentas de gerenciamento de IP no Debian iproute 2,. ( Link secundário ) Parece algo semelhante ao
Bringin up the interface: ip link set eth0 up

ip addr add 192.168.0.2/24 dev ethe0
ip addr add 192.168.0.3/24 dev eth0

Em seguida, configure a tabela de roteamento com
ip route add 10.0.0.0/16 via 192.168.0.2


--Christopher Karel

Christopher Karel
fonte
Uma máscara de rede 255.255.255.255 é consistente com a documentação da empresa de hospedagem e a resposta DHCP. Segundo o Google, é normal ter 255.255.255.255 em redes ponto a ponto. Até onde eu sei, seria estúpido da empresa de hospedagem usar uma rede sem ponto a ponto, dado o risco de segurança de ter hosts não confiáveis ​​no mesmo domínio de broadcast da camada 2.
Hendrik Brummermann
Como Wolfgangsz estava dizendo acima, um / 32 não é um padrão para um link ponto a ponto. Eu sei que um / 31 pode ser feito, mas obviamente mata os identificadores de transmissão e de rede. A 'rota do host' que você viu mencionada refere-se ao uso em tabelas de roteamento. por exemplo: é uma rota para um host específico, não para uma rede. Daí a sua ocorrência no RFC que você vinculou no OSPF, um protocolo de roteamento. Dito isto, se você tem certeza de que o seu provedor de serviços de Internet o instrui a fazer isso com o sistema operacional, é melhor mantê-lo.
Christopher Karel
OK, algumas edições feitas, que podem ajudar no seu problema original.
Christopher Karel
-1

Sua configuração atual não deve realmente funcionar. Como a máscara de rede para ambas as interfaces é 255.255.255.255, não há espaço para um gateway. No entanto, para fornecer tráfego significativo, seu servidor precisa de um gateway. O ISP que fornece os dois endereços IP públicos também deve fornecer configurações de máscara de rede e gateway para os dois endereços IP.

Exemplo (este é o meu servidor privado e os endereços IP são reais):

Tabela de roteamento IP do kernel
Gateway de destino Genmask Flags Ref métrico Use Iface
217.10.144.208 0.0.0.0 255.255.255.248 U 0 0 0 eth0
0.0.0.0 217.10.144.209 0.0.0.0 UG 0 0 0 eth0

O próprio servidor está no 217.10.144.210, que fica na mesma sub-rede que o gateway (necessário, caso contrário, nenhum tráfego poderá ser roteado). Presumivelmente, o ISP também está fornecendo a mesma sub-rede para alguns outros clientes.

Se você estiver nesse servidor e fizer um ping no seu gateway, deverá receber uma mensagem "sem rota para hospedar".

Converse com o ISP e obtenha as configurações corretas, atualize a configuração da interface, reinicie a rede e verifique novamente.

wolfgangsz
fonte
2
Uma máscara de rede 255.255.255.255 é consistente com a documentação da empresa de hospedagem e a resposta DHCP. Segundo o Google, é normal ter 255.255.255.255 em redes ponto a ponto. Até onde eu sei, seria estúpido da empresa de hospedagem usar uma rede sem ponto a ponto, dado o risco de segurança de ter hosts não confiáveis ​​no mesmo domínio de broadcast da camada 2.
Hendrik Brummermann
Se você tiver uma rede ponto a ponto, sua máscara de rede será 255.255.255.252. Isso permitiria os dois hosts que compõem os dois pontos finais, um endereço de rede e um endereço de broadcast. Este é o cenário normal para esse tipo de conexão. No seu caso, o outro host seria sua porta de entrada para o resto do mundo. Eu realmente não me importo com o que você descobre no google, mas é assim que a rede TCP / IP funciona. E claramente não está funcionando para você. Deixo as conclusões para você.
wolfgangsz
Obrigado, mas esta parte está funcionando perfeitamente bem para mim. A propósito, é chamada de "rota de host" no padrão oficial da Internet: rfc-editor.org/rfc/rfc2328.txt
Hendrik Brummermann
Meu problema também é reproduzível em uma rede local: máscara ifconfig eth0 192.168.0.2 255.255.255.0 / ifconfig eth0: 1 máscara 192.168.0.3 máscara 255.255.255.0 / route add default gw 192.168.0.1
Hendrik Brummermann