Como usar uma interface específica para um ip de destino específico?

0

Eu tenho duas interfaces com uma que é uma conexão usb de internet compartilhada do meu telefone Android.

  • enp0s31f6 : conexão de internet ethernet (padrão)
  • enp0s20f0u1 : conexão compartilhada android

Eu gostaria de usar a interface enp0s20f0u1 para acessar por meio do ssh para apenas um IP. Quero dizer, tudo o que será conectado ao A.B.C.D (externo / internet ip) tem que passar por essa interface. Nada mais.

Estou usando o Centos 7.

  • Como posso rotear todos os pacotes que têm A.B.C.D como IP de destino para usar enp0s20f0u1 interface?

  • Preciso usar ip route ou iptables é suficiente? Por quê?

Eu sou muito novo em "roteamento ip", por favor, dê-me uma explicação com a sua resposta.

Detalhes:

enp0s20f0u1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.42.174  netmask 255.255.255.0  broadcast 192.168.42.255

enp0s31f6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.128.1.21  netmask 255.255.254.0  broadcast 10.128.1.255

O que eu fiz:

$ ip route:

default via 10.128.0.1 dev enp0s31f6  proto static  metric 100 
default via 192.168.42.129 dev enp0s20f0u1  proto static  metric 101 
10.128.0.0/23 dev enp0s31f6  proto kernel  scope link  src 10.128.1.21  metric 100 
10.136.80.66 via 10.128.0.1 dev enp0s31f6  proto dhcp  metric 100 
192.168.42.0/24 dev enp0s20f0u1  proto kernel  scope link  src 192.168.42.174  metric 100 
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1

O ip da minha interface é 192.168.42.174 e o gateway para esta interface é 192.168.42.129 .

Eu removi a segunda linha como dirkt disse: default via 192.168.42.129 dev enp0s20f0u1 proto static metric 101

$ ip route

default via 10.128.0.1 dev enp0s31f6  proto static  metric 100 
10.128.0.0/23 dev enp0s31f6  proto kernel  scope link  src 10.128.1.21  metric 100 
10.136.80.66 via 10.128.0.1 dev enp0s31f6  proto dhcp  metric 100 
A.B.C.D via 192.168.42.129 dev enp0s20f0u1 
192.168.42.0/24 dev enp0s20f0u1  proto kernel  scope link  src 192.168.42.174  metric 100 
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1

Eu não quero usar essa interface para qualquer outra coisa que o ABCD. Devo remover

192.168.42.0/24 dev enp0s20f0u1  proto kernel  scope link  src 192.168.42.174  metric 100

também? Acho que não, parece que é para a rede LAN da minha interface.

Eu cometi um erro, eu uso o ip da interface para o via em vez do gateway.

Tudo está funcionando bem agora. Está mais claro.

Pergunta subsidiária apenas para o entendimento, se agora eu quero redirecionar apenas a porta 22 e bloquear todo o resto. Eu acho que preciso do iptables / firewallD, para rejeitar tudo com ABCD como dest IP e para permitir apenas a porta 22.

    
por Alexis_FR_JP 12.06.2017 / 06:55

2 respostas

2

O roteamento funciona escolhendo o destino mais específico. Isso significa que você precisa

  • uma rota para o segmento por trás de cada interface
  • uma rota padrão (e não várias)
  • uma rota especial para o seu destino A.B.C.D ssh .

Assim, a saída de ip route deve ser semelhante:

default via 10.128.0.1 dev enp0s31f6  proto static  metric 100 
10.128.0.0/23 dev enp0s31f6  proto kernel  scope link  src 10.128.1.21  metric 100 
192.168.42.0/24 dev enp0s20f0u1  proto kernel  scope link  src 192.168.42.65  metric 100 
A.B.C.D/32 dev enp0s20f0u1  ...

Para adicionar o último, faça

ip route add A.B.C.D/32 dev enp0s20f0u1 via 192.168.42.129

onde 192.168.42.129 é o gateway atual (não precisa ser constante).

Use

ip route del default via 192.168.42.129 dev enp0s20f0u1

para apagar a segunda rota padrão manualmente, se você quiser ter certeza de que nada além de A.B.C.D e link de pacotes locais passe por essa interface. Do jeito que está configurado agora, se a primeira interface ficar inativa por algum motivo, todo o tráfego usará essa interface.

Na sua saída, você tinha um 10.136.80.66 que foi adicionado via DHCP. Não sei por que isso foi adicionado, mas muito provavelmente a infraestrutura precisa disso por algum motivo.

Existem várias maneiras de automatizar essa configuração, que depende de como exatamente o seu sistema está configurado (gerenciador de rede? /etc/network/interfaces ?)

Usar iptables para marcar pacotes como sugerido no comentário é uma ideia estúpida, o roteamento funciona diretamente sem precisar definir marcas. Isso é o que o roteamento é para.

Usar uma máscara de rede /24 como sugerido em uma resposta em vez de uma máscara de rede /32 para A.B.C.D encaminhará mais de um endereço de destino (na verdade, 256 deles), portanto, não faça isso.

    
por 12.06.2017 / 09:30
0

I would like to use enp0s20f0u1 interface to access through ssh to only one IP. I mean, everything that will be connected to A.B.C.D (external/internet ip) have to go through this interface. Nothing else.

Isso parece bastante simples ... Você deseja rotear o tráfego em direção a enp0s20f0u1 para uma interface próxima do hip, que é exatamente o trabalho da tabela de roteamento.

ip route A.B.C.D/32 192.168.42.xx

onde xx é o último octeto do endereço IP do próximo salto que você deseja usar.

    
por 12.06.2017 / 09:10

Tags