Acheminer une adresse IP à une autre et conserver l'adresse src?

-1

Envisagez de suivre:

WAN IP1: aaa.aaa.aaa.aaa/23 
WAN IP2: bbb.bbb.bbb.bbb/25
LAN Subnet: 10.3.0.0/24

LES DEUX adresses WAN ont été acheminées vers un serveur Linux et le serveur Linux est accessible sur les deux adresses. Je souhaite router bbb.bbb.bbb.bbb vers un autre hôte sur une interface LAN (10.3.0.2).

INTERNET -- Linux Server
            (aaa.aaa.aaa.aaa/23, bbb.bbb.bbb.bbb/25 ens3)
            (10.3.0.1/24 tap0) -------- Router
                                        (10.3.0.2/24 tap0)
                 INTERNET -- ISP NAT -- (xxx.xxx.xxx.xxx/xx eth0)
                                        (172.16.1.0/24 br-lan)

Maintenant, je veux router bbb.bbb.bbb.bbb sur mon routeur le 10.3.0.2 via tap0 (bbb.bbb.bbb.bbb était une adresse sur l’ens3). Donc, mon routeur aura une adresse IP publique. Voici ce que j'ai fait:

ip addr del bbb.bbb.bbb.bbb/25 dev ens3 # remove from ens3
ip route add bbb.bbb.bbb.bbb dev tap0   # route it to tap0

Le graphique sera comme:

INTERNET -- Linux Server
            (aaa.aaa.aaa.aaa/23 ens3)
            (10.3.0.1/24 tap0) -------- Router
                                        (10.3.0.2/24, bbb.bbb.bbb.bbb tap0)
                 INTERNET -- ISP NAT -- (xxx.xxx.xxx.xxx/xx eth0)
                                        (172.16.1.0/24 br-lan)

Et, table de routage sur serveur Linux:

% ip -4 route
default via aaa.aaa.aaa.1 dev ens3 onlink 
10.3.0.0/24 via 10.3.0.1 dev tap0 
10.3.0.1 dev ens3  scope link 
aaa.aaa.aaa.0/23 dev ens3  proto kernel  scope link  src aaa.aaa.aaa.aaa 
bbb.bbb.bbb.bbb dev tap0  scope link 
169.254.0.0/16 dev ens3  scope link

Et sur mon routeur, j'ai ajouté l'adresse bbb.bbb.bbb.bbbet je peux maintenant faire un ping bbb.bbb.bbb.bbbsur un serveur Linux.

Cependant, je ne peux pas cingler bbb.bbb.bbb.bbbsur d'autres hôtes. Alors j'ai essayé:

iptables -t nat -A POSTROUTING -j MASQUERADE

Avec cette règle, j'ai pu faire un ping bbb.bbb.bbb.bbbsur Internet. Et si je fais un traceroute, je peux voir que bbb.bbb.bbb.bbb est derrière aaa.aaa.aaa.aaa, c'est-à-dire:

... 
10. ???
11. aaa.aaa.aaa.aaa                   0.0%    16   45.3  43.6  43.1  45.5   0.8
12. bbb.bbb.bbb.bbb                   0.0%    16   53.7  54.8  51.2  79.4   7.1

Cependant, je veux la véritable adresse IP source au point de terminaison du tunnel (10.3.0.2) - maintenant, je reçois tout le trafic 10.3.0.1 sur mon routeur, car le serveur Linux utilise SNAT. Comment devrais-je faire ça?

Morichika Maho
la source
À quoi ressemble la table de routage sur les hôtes devant envoyer une requête ping à bbb.bbb.bbb.bbb? Où enverront-ils le trafic à destination de bbb.bbb.bbb.bbb? Et où bbb.bbb.bbb.bbb enverrait-il le trafic à destination de son adresse IP source réelle?
David Schwartz

Réponses:

2

C'est une question un peu confuse, parce que les commandes que vous avez données ne le font pas, ... Je veux router bbb.bbb.bbb.bbb sur mon routeur le 10.3.0.2 via tap0 . Si je vous ai bien compris, vous voulez que le routeur passe par le serveur Linux pour pouvoir accéder à Internet. Si c'est le cas , voici comment l'obtenir, en commençant par la configuration de votre première figure, c'est-à - dire en négligeant vos commandes suivantes.

  1. Sur le serveur Linux, activez le transfert IPv4 , puis lancez:

      iptables -t -nat -A POSTROUTING -o eth0 -j MASQUERADE
      ip route add 172.16.0.0/24 via 10.3.0.2 dev tap0
    
  2. Sur le routeur, je présume que le transfert IPv4 est activé par défaut:

    ip route del default
    ip route add default via 10.3.0.1 dev tap0 
    iptables -A INPUT -s 10.8.3.0.1 -j ACCEPT
    

L'avantage de cela est qu'il effectue un seul niveau de NAT, sur le serveur Linux, puis que le routage s'occupe de tout. Si vous voulez que les clients du réseau local recherchent le serveur Linux par son nom (par exemple, il s’appelle LS), ajoutez la ligne suivante:

10.3.0.2    LS

au fichier / etc / hosts du routeur : il n’est pas nécessaire de configurer un serveur DNS pour un aussi petit besoin.

Cependant, cela ne revient pas à ... Donc, mon routeur aura une adresse IP publique , car l'adresse IP publique appartient au serveur Linux. Si quelqu'un essaie de contacter aaa.aaa.aaa.aaa , ce sera le serveur Linux qui devra répondre. La seule exception que vous pouvez fournir est le transfert de port , ce qui signifie que toutes les communications sur un port donné seront transférées vers le routeur, mais vous ne pouvez pas transférer toutes les communications sur tous les ports vers le routeur (ce qui signifierait vraiment ... Mon routeur aura une adresse IP publique ). À moins bien sûr que votre serveur Linux ne possède 2 adresses IP, auquel cas vous pouvez en réserver un pour le routeur et l’autre pour le serveur Linux.

MariusMatutiae
la source
Oui, ce serveur Linux avait deux adresses IP. Aaa.aaaaaaaaaa et bbb.bbb.bbb.bbb sont des adresses IPv4 publiques et sont toutes deux routées vers le serveur Linux.
Morichika Maho
On dirait que je ne m'exprimais pas correctement - mon anglais n'est pas bon. J'ai édité la question pour qu'elle paraisse moins déroutante. Ce que je veux faire, c'est "donner" une adresse IP sur un serveur Linux à un routeur, de sorte qu'elle puisse être accessible depuis Internet. Je veux que le routeur voie l’adresse IP source réelle des clients. Le NAT sur un serveur Linux n’est donc pas une solution. Je veux plutôt que le serveur Linux route cette adresse IP directement vers mon routeur.
Morichika Maho
@ MorichikaMaho Bien, cela est maintenant clair. Ce que je ne comprends pas comment vous pouvez avoir une adresse IP publique, routable sur un robinet appareil. Pourriez-vous s'il vous plaît clarifier?
MariusMatutiae
Il est acheminé vers eth0 sur un serveur Linux et je l'ai acheminé vers tap0 sur un serveur Linux à l'aide de ip route add bbb.bbb.bbb.bbb dev tap0.
Morichika Maho
@MorichikaMaho Permettez-moi de clarifier ceci: votre serveur Linux dispose de deux interfaces Ethernet, eth0 et ens3 , avec des adresses IP publiques différentes? Si tel est le cas, si vous le réacheminez (comme vous l’appelez) pour taper 0 , vous devez supprimer cette route. Les deux adresses IP publiques partagent-elles la même passerelle ou non? C'est très important.
MariusMatutiae
0

C'est juste si simple et je ne sais pas pourquoi je ne l'avais pas remarqué auparavant.

Comme ma passerelle par défaut sur le routeur n'est PAS le serveur de tunnel, le routeur tente de répondre au paquet provenant de tun0 via la passerelle de eth0. Faire SNAT transforme l’adresse source en 10.3.0.1 - Le routeur sait où les renvoyer, et c’est pourquoi il travaille avec MASQUERADE.

Ainsi, sur le routeur, créez une nouvelle table de routage et définissez sa passerelle par défaut sur tun0. Ensuite, faites en sorte que l’IP source trouve bbb.bbb.bbb.bbbdans cette table.

Morichika Maho
la source
C'est clairement plus complexe que cela. En fait, je ne crois pas que cela puisse être fait, du moins pas comme vous l'avez décrit dans vos commentaires sur mon post.
MariusMatutiae
@MariusMatutiae Hmm ... Je ne peux pas en être certain non plus. Cela pourrait avoir quelque chose à voir avec le 169.254.0.0/16bloc. J'ai activé le proxy ARP sur ens3et tap0. Quand il y a un trafic bbb.bbb.bbb.bbbvenant de ens3, je vois 169.254.169.254demander qui a bbb.bbb.bbb.bbble ens3, et mon routeur le tap0répond.
Morichika Maho
Les interfaces tap n'ont pas besoin d'adresses IP, elles devraient plutôt être pontées et le pont devrait alors obtenir une adresse IP.
MariusMatutiae
@MariusMatutiae Oui - Je découvre que je n'ai pas besoin d'adresse IP car je peux laisser ARP savoir où se trouve mon routeur. La procuration ARP fera la même chose que la mariée ici - alors je n’ai pas utilisé de pont.
Morichika Maho