Iată cum am făcut asta.
Am amenajat un tunel GRE între AAAA
și B.B.B.B
(interfață gre1
pe ambele servere), cu adrese IP de tunel intern punct la punct 10.0.0.1
și 10.0.0.2
(respectiv). Rețineți că nu este nevoie de criptare, deoarece pachetele din tunel vor fi oricum despachetate și trimise prin Internet așa cum sunt.
În continuare, trebuie să configuram B.B.B.B
pentru a permite NAT
pe interfața sa externă eth0
. Acest lucru se face prin firewalld
. Apoi trebuie să adăugăm o regulă personalizată la firewalld
pentru a nu bloca pachetele GRE primite. Am pus gre1
interfață în de încredere
astfel încât toate pachetele care sosesc în interiorul tunelului sunt permise și vor primi NAT.
În rețeaua de acasă, eram deja configurați prin firewalld
ca router NAT, astfel încât singurele lucruri rămase de făcut au fost (a) să creați cealaltă parte a tunelului GRE și (b) să faceți deviația Linux 192.168.1.17
trafic de ieșire în tunel. Acest ultim pas este partea ușor dificilă.
Detalii mai jos...
Stabilit peste B.B.B.B
(Server la distanta)
Adăugați interfață gre1
:
# /etc/sysconfig/network/ifcfg-gre1
STARTMODE='onboot'
BOOTPROTO='static'
TUNNEL='gre'
TUNNEL_LOCAL_IPADDR='B.B.B.B'
TUNNEL_REMOTE_IPADDR='A.A.A.A'
IPADDR='10.0.0.2'
REMOTE_IPADDR='10.0.0.1'
TUNNEL_TTL='64'
ZONE=de încredere
Adăugați ruta către rețeaua de domiciliu și partea de la distanță a conexiunii P2P prin gre1
:
# /etc/sysconfig/network/ifroute-gre1
# Opțiuni de interfață Destination Gateway Netmask
192.168.1.0/24 - - -
10.0.0.1 - - -
Configurați firewalld
prin intermediul yast2 firewall
- Pune interfața
eth0
in zona extern
- Pune interfața
gre1
in zona de încredere
- Adăugați o regulă de firewall personalizată la zonă
extern
permițând intrarea pachetelor GRE de la AAAA
- Adăugați reguli de firewall personalizate pentru a fixa TCP MSS la ambele
extern
și de încredere
zone (necesită firewalld >= 1.0.0
)
Fișiere de zonă în /etc/firewalld/zones
:
# /etc/firewalld/zones/external.xml
<zonă>
<short>Extern</short>
<service name="ssh"/>
...
<mascaradă/>
<rule family="ipv4">
<source address="A.A.A.A"/>
<accept/>
</regulă>
<regula>
<tcp-mss-clamp value="1420"/><!-- necesită firewalld >= 1.0.0 -->
</regulă>
<interface name="eth0"/>
</zonă>
# /etc/firewalld/zones/trusted.xml
<zone target="ACCEPT">
<short>De încredere</short>
<description>Toate conexiunile la rețea sunt acceptate.</description>
<regula>
<tcp-mss-clamp value="1420"/><!-- necesită firewalld >= 1.0.0 -->
</regulă>
<interface name="gre1"/>
</zonă>
Stabilit peste AAAA
(Server de rețea de domiciliu)
Aceasta presupune că AAAA
este deja configurat pentru NAT 192.168.1.0/24
reţea, etc.
Adăugați interfață gre1
:
# /etc/sysconfig/network/ifcfg-gre1
STARTMODE='onboot'
BOOTPROTO='static'
TUNNEL='gre'
TUNNEL_LOCAL_IPADDR='A.A.A.A'
TUNNEL_REMOTE_IPADDR='B.B.B.B'
IPADDR='10.0.0.1'
REMOTE_IPADDR='10.0.0.2'
TUNNEL_TTL='64'
ZONE='de încredere'
Adăugați o rută către partea la distanță a conexiunii P2P prin gre1
:
# /etc/sysconfig/network/ifroute-gre1
# Opțiuni de interfață Destination Gateway Netmask
10.0.0.2 - - -
Configurați firewalld
prin intermediul yast2 firewall
:
- Pune interfața
gre1
in zona de încredere
- Interfață
eth0
ar trebui să fie deja în zonă extern
Activarea redirecționării
Aceasta este "partea dificilă" finală care provoacă 192.168.1.17
Traficul de ieșire al lui va fi deviat prin tunelul GRE.
Pentru a activa redirecționarea, executați aceste comenzi AAAA
:
$ ip route flush tabelul 10
$ ip route adăugați tabelul 10 la implicit prin 10.0.0.2 dev gre1
$ ip regula adăugare de la 192.168.1.17 tabel 10 prioritate 10
Pentru a anula comenzile de mai sus:
$ ip regula del din 192.168.1.17 tabel 10 prioritate 10
$ ip route flush tabelul 10