Instradamento di una particolare sottorete in un tunnel VPN


5

La mia rete è simile a questa:

inserisci qui la descrizione dell'immagine

Sto provando a configurare il mio router in modo che la sottorete (192.168.2.0/24) venga instradata sul tunnel VPN (tun0) sul gateway / router.

Allo stesso tempo, i client sulla sottorete (192.168.1.0/24) vengono instradati direttamente su ppp0, cioè non attraverso la VPN.

Non voglio eseguire client software VPN e alcuni client sulla rete necessitano di accesso diretto. ad es. un computer da gioco Windows, un telefono voip ecc.

Il mio router esegue anche un server DNS non associato che inoltra le ricerche DNS a dnscrypt-proxy.

Le interfacce di rete sul router sono configurate come:

auto lo
    iface lo inet loopback

auto lo:1
iface lo:1 inet static
    address 127.0.0.2
    netmask 255.0.0.0

auto eth0
iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0

# Virtual interface
auto eth0:2
iface eth0:2 inet static
    address 192.168.2.1
    netmask 255.255.255.0

auto eth1
iface eth1 inet static
    address 192.168.0.2
    netmask 255.255.255.252

auto ppp0
iface ppp0 inet ppp
    pre-up ip link set dev eth1 up
    provider <isp>
    post-down ip link set dev eth1 down

Per il momento sto usando un'interfaccia virtuale, ad esempio eth0: 2. Mi chiedo anche se questo è appropriato o dovrebbe essere una VLAN, ovvero eth0.2?

Per quanto ne sapevo, l'unica differenza sarebbe che i clienti avrebbero quindi bisogno di un'interfaccia VLAN, ad esempio:

/etc/systemd/network/MyEth.network

[Match]
Name=enp10s0

[Network]
DHCP=v4
DNS=192.168.2.1
Address=192.168.2.30/24
Gateway=192.168.2.1
VLAN=vlan2

/etc/systemd/network/MyEth.netdev

[NetDev]
Name=vlan2
Kind=vlan

[VLAN]
Id=2

e non essere in grado di attraversare le sottoreti, ad esempio 192.168.1.10, non sarebbe in grado di parlare con 192.168.2.10.

Le regole di iptables con cui ho provato a farlo funzionare sono le seguenti:

iptables -F
iptables -t nat -F

export WAN=ppp0           # Link to ISP
export INT_IF=eth0        # Interface that serves internal network
export EXT_IF=eth1        # Interface between router and modem
export WAN_TUNNEL=tun0    # VPN tunnel created by OpenVPN
export VPN_VLAN_IF=eth0:2 # Interface internal clients have as their gateway

# Allows internet access on gateway
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

#############
# NAT Rules #
###############################################################################
# VPN
iptables -I FORWARD -i ${VPN_VLAN_IF} -d 192.168.2.0/24 -j DROP
iptables -A FORWARD -i ${VPN_VLAN_IF} -s 192.168.2.0/24 -j ACCEPT
iptables -A FORWARD -i ${WAN_TUNNEL} -d 192.168.2.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ${WAN_TUNNEL} -j MASQUERADE
###############################################################################

###############################################################################
# NO VPN
iptables -I FORWARD -i ${INT_IF} -d 192.168.1.0/24 -j DROP
iptables -A FORWARD -i ${INT_IF} -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ${WAN} -j MASQUERADE
###############################################################################

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

/etc/init.d/iptables save

Mi aspetto anche che dovrei usare route-nopull nella mia configurazione openvpn, altrimenti tutto sul gateway verrebbe instradato sulla VPN?

Per impostazione predefinita quando mi connetto al server OpenVPN vedo:

openvpn[3469]: /sbin/ip route add <ip_of_vpn> dev ppp0
openvpn[3469]: /sbin/ip route add 0.0.0.0/1 via 172.16.32.1
openvpn[3469]: /sbin/ip route add 128.0.0.0/1 via 172.16.32.1

che si traduce in un percorso come:

ip route
0.0.0.0/1 via 172.16.32.1 dev tun0 
default dev ppp0  scope link  metric 300 
<ip_of_vpn> dev ppp0  scope link 
128.0.0.0/1 via 172.16.32.1 dev tun0 
172.16.32.0/20 dev tun0  proto kernel  scope link  src 172.16.39.64 
192.168.0.0/30 dev eth1  proto kernel  scope link  src 192.168.0.2 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.1 
192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.1 
<ip_from_isp> dev ppp0  proto kernel  scope link  src X.X.X.X

Avrei bisogno di un percorso statico per instradare 192.168.2.0/24 alla VPN, cioè a tun0

Risposte:


4

Ciò può essere ottenuto utilizzando una tabella di instradamento personalizzata e criteri (recentemente ho fatto qualcosa di molto simile da solo)

  1. Innanzitutto crea una tabella di routing personalizzata per la tua VPN

    echo "10 vpn" >> /etc/iproute2/rt_tables
    
  2. Di 'a iproute2 di usare questa tabella di routing per il traffico da e verso la tua rete 192.168.2.0

    ip rule add from 192.168.2.0/24 table vpn
    ip rule add to 192.168.2.0/24 table vpn
    
  3. Configurare NAT masquerading per la rete 192.168.2.0

    iptables -A FORWARD -i eth0:2 -s 192.168.2.0/24 -j ACCEPT
    iptables -A FORWARD -i tun0 -d 192.168.2.0/24 -j ACCEPT
    iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o tun0 -j MASQUERADE
    
  4. Abilita l'inoltro IP se non è abilitato (richiesto per NAT)

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  5. Nella tua configurazione OpenVPN aggiungi le seguenti righe

    #Prevents default gateway from being set on the default routing table
    route-noexec
    #Allows route-up script to be executed
    script-security 2
    #Calls custom shell script after connection to add necessary routes
    route-up /etc/openvpn/route-up.sh
    
  6. Crea uno script shell personalizzato in /etc/openvpn/route-up.sh e chmod + x esso

    #!/bin/sh
    
    #Clear all routes on vpn routing table (this is to make sure there isn't any crap left over from a previous vpn connection
    /sbin/ip route flush table vpn
    
    #Copy routing table from main routing table into vpn table
    /sbin/ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table vpn $ROUTE; done
    
    #Add default gateway to vpn routing table
    /sbin/ip route add default via ${route_vpn_gateway} dev ${dev} table vpn
    

I passaggi 2 e 3 non persistono tra i riavvii, quindi sarà necessario aggiungere tali parti agli script di inizializzazione come richiesto.


provato con openwrt e una configurazione mwan, non ha funzionato. ho il sospetto che le regole di
Mwan non abbiano funzionato bene
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.