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.bbb
et je peux maintenant faire un ping bbb.bbb.bbb.bbb
sur un serveur Linux.
Cependant, je ne peux pas cingler bbb.bbb.bbb.bbb
sur 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.bbb
sur 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?
la source
Réponses:
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.
Sur le serveur Linux, activez le transfert IPv4 , puis lancez:
Sur le routeur, je présume que le transfert IPv4 est activé par défaut:
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:
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.
la source
ip route add bbb.bbb.bbb.bbb dev tap0
.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.bbb
dans cette table.la source
169.254.0.0/16
bloc. J'ai activé le proxy ARP surens3
ettap0
. Quand il y a un traficbbb.bbb.bbb.bbb
venant deens3
, je vois169.254.169.254
demander qui abbb.bbb.bbb.bbb
leens3
, et mon routeur letap0
répond.