Iptables peut-il être utilisé pour convertir un hôte à un seul hôte en un server NAT?

Donné: J'ai une machine (HostA) avec une seule carte réseau qui a la connectivité Internet. J'ai une autre machine (HostB) avec une carte réseau sur le même commutateur. HostB n'est pas encore configuré pour l'access Internet. HostA a sa passerelle par défaut et les servers DNS correctement configurés. IPv4 est utilisé. Les systèmes d'exploitation sur les hôtes sont Ubuntu 13 et Fedora17.

Ce que je veux: Maintenant, j'aimerais que HostB ait aussi une connectivité Internet. Est-ce possible en utilisant une combinaison d' iptables , de périphériques virtuels tun / tap ou une configuration VPN entre HostA et HostB, etc.?

Ce que je sais et peux faire: Actuellement, je peux utiliser un proxy SOCKS basé sur ssh sur HostB ( ssh -D 9050 UserA@HostA ) et apather le trafic de certaines applications 'socksifiables' sur HostB via ce proxy à HostA et au-delà. Malheureusement, toutes les applications ne sont pas sociables. Maintenant, je sais très bien que si HostA avait 2 maps réseau, j'aurais pu utiliser des règles iptables pour convertir HostA en une passerelle qui apatherait le trafic entre sa carte réseau NIC-1 et NIC-2 (où NIC-1 serait connecté à HostB et NIC-2 à Internet). Mais installer une autre carte réseau dans HostA n'est pas faisable pour moi.

PS: Je l'avais posté plus tôt sur superuser.com mais je n'ai eu aucune information utile.

modifier 1:

information de réseau

Hôte 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 

Hôte 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 mesortingc 1000 192.168.22.0/24 dev eth0 proto kernel scope link src 192.168.22.234 mesortingc 1 

Le routing est sur "où (et si) envoyer". Cela ne se limite pas à la sélection d'une carte réseau. Dans votre cas, le routing est très simple.

Vous avez besoin de masquerading dans sa forme la plus simple (toutes les commands sur l'hôte A):

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

Et peut-être (si pas encore) vous devez autoriser le transfert:

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

En supposant que l'hôte A est configuré en tant que passerelle par défaut pour l'hôte B.

Modifier 1:

Après une discussion en ligne, la situation est devenue plus claire. En théorie, la configuration de la passerelle par défaut sur B aurait dû suffire. Mais il semble que la passerelle (qui n'est pas sous le contrôle du questionneur) bloque l'hôte B. La solution de masquage était donc nécessaire.