O iptables pode ser usado para converter um host de hospedagem única em um servidor NAT?

3

Dado: Eu tenho uma máquina (HostA) com somente uma NIC que tem conectividade com a Internet. Eu tenho outra máquina (HostB) com uma placa de rede no mesmo switch. O HostB não está configurado para acesso à Internet ainda. HostA tem seu gateway padrão e servidores DNS apropriadamente configurados. O IPv4 está sendo usado. OSs nos hosts são o Ubuntu 13 e o Fedora17.

O que eu quero: Agora, gostaria que a HostB também tivesse conectividade com a Internet. Isso é possível usando a combinação 'some' de iptables , dispositivos tun / tap virtuais ou uma configuração de VPN entre HostA e HostB, etc?

Atualmente, posso usar um proxy SOCKS com ssh no HostB ( ssh -D 9050 UserA@HostA ) e direcionar o tráfego de aplicativos 'socksifiable' selecionados no HostB via este proxy para HostA e além. No entanto, infelizmente, nem todos os aplicativos são compatíveis com socksifiable. Agora, eu sei muito bem que se HostA tivesse 2 NICs, eu poderia ter usado algumas regras de iptables para converter HostA em um gateway que rotearia o tráfego entre sua NIC-1 e NIC-2 (onde a NIC-1 estaria conectada para HostB e NIC-2 para Internet). Mas instalar outro NIC no HostA não é viável para mim.

PS: Eu tive postou isso antes no superuser.com mas não obteve informações úteis.

edit 1:

informações de rede

Anfitrião A:

:> ip addr
[...]
2: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether d4:be:d9:d5:46:05 brd ff:ff:ff:ff:ff:ff
inet 192.168.22.9/24 brd 192.168.22.255 scope global p4p1 

:> ip route
default via 192.168.22.254 dev p4p1 proto static
192.168.22.0/24 dev p4p1 proto kernel scope link src 192.168.22.9

Host B:

:> ip addr
[...]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 30:f9:ed:d9:2e:20 brd ff:ff:ff:ff:ff:ff
inet 192.168.22.234/24 brd 192.168.22.255 scope global eth0 

:> ip route
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.22.0/24 dev eth0 proto kernel scope link src 192.168.22.234 metric 1
    
por Harry 18.05.2013 / 15:34

1 resposta

4

O roteamento é sobre "onde (e se) enviar para". Isso não se limita a selecionar uma NIC. No seu caso, o roteamento é muito simples.

Você precisa se mascarar em sua forma mais simples (todos os comandos no host A):

iptables -t nat -I POSTROUTING -s 192.168.22.234 -j MASQUERADE

E talvez (se ainda não) você precisar permitir o encaminhamento:

iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD 2 -s 192.168.22.234 -j ACCEPT

Supondo que o host A esteja configurado como o gateway padrão para o Host B.

Editar 1:

Após uma conversa por chat, a situação ficou mais clara. Em teoria, configurar o gateway padrão em B deveria ser suficiente. Mas parece que o gateway (que não está sob o controle do questionador) bloqueia o host B. Assim, a solução de mascaramento era necessária.

    
por 18.05.2013 / 16:02