Respondendo na mesma interface de onde o pedido veio

6

Primeiro, sei que não é assim que o IP é pretendido. Mas, como de costume, é assim que preciso que funcione.

Eu trabalho para uma empresa de segurança. Existem pelo menos duas interfaces de rede. Ambas as interfaces devem ter um gateway padrão. Uma interface é uma interface Ethernet padrão, a segunda é uma interface 3g. Ambos se conectam à internet. Diferentes configurações são possíveis, pois uma interface é a principal e a outra é o backup. Ou a interface Ethernet é LAN local (com diferentes sub-redes, gateway) e o modem 3G é a conexão à Internet.

A minha principal questão é, como posso fazer com que a pilha TCP / IP do Linux responda na mesma interface de onde veio uma solicitação.

A segunda pergunta é como eu posso iniciar uma conexão através da interface de minha escolha, sem tocar com diferentes sub-redes em diferentes interfaces.

    
por Malic 28.01.2011 / 17:06

2 respostas

8

Você pode definir rotas no Linux com base no endereço IP de origem. Embora seja possível no Linux vincular-se a uma interface específica, é muito incomum. O roteamento baseado no IP de origem permitirá que você crie um gateway padrão por interface de saída. Como o soquete para o servidor que está em campo, as solicitações podem ser vinculadas a um IP, isso garantirá que as respostas sejam enviadas da mesma interface em que entraram. (Se o servidor estiver atendendo no endereço curinga ( 0.0.0.0 ) e não vinculado a uma interface específica, você não poderá usar esse método. Ele ainda deve ser possível usando o módulo conntrack e as marcas iptables, mas Eu não vou entrar nisso aqui.

Você pode fazer isso criando outra tabela de roteamento usando o comando ip . O '10' aqui é arbitrário.

# 10.0.0.1 = gateway for the secondary interface
# 10.0.0.10 = ip address for the secondary interface eth1

ip route add default via 10.0.0.1 dev eth1 table 10
ip rule add from 10.0.0.10 table 10

Se você estiver vinculado a vários endereços ou tiver o dhcp, poderá criar uma base de regras na sub-rede

ip route add default via 10.0.0.1 dev eth1 table 10
ip rule add from 10.0.0.0/8 table 10

Se tiver certeza de que o servidor está vinculado a um dispositivo, outro gateway padrão com uma métrica mais alta será suficiente.

ip route add default via 10.0.0.1 dev eth1 metric 2
    
por 28.01.2011 / 19:28
1

Não tenho certeza se isso é possível no sentido geral desejado. Você certamente pode controlar qual interface de rede um programa em execução na sua máquina usa vinculando-o a um endereço específico.

No entanto, em geral, não acho que haja uma maneira de conectar pacotes de rede de entrada a pacotes de saída. O melhor que você pode fazer é fornecer instruções para o sistema ao longo das linhas de 'se você está tentando se conectar a esta rede, use sempre esta interface'. Isso pode ser feito de várias maneiras através da tabela de roteamento do sistema ( iproute ) ou com iptables regras de firewall.

Se isso é para fins de segurança, você já pensou em usar máquinas virtuais em execução em seu servidor físico? Você poderia configurar uma VM para ter acesso somente a uma interface e outra VM para ter acesso somente à outra. Como a VM não consegue ver a outra interface, não há como responder aos pacotes da rede incorreta.

Você provavelmente também deve procurar em esta questão de falha de servidor que abrange como controlar quais solicitações arp de interface serão ativadas. Você também deve olhar para o sysctl rp_filter, que pode ser configurado para ignorar pacotes que aparecem na interface incorreta.

    
por 28.01.2011 / 17:40