Frage howto nur tunnel spezifische hosts route durch openvpn client auf tomate [geschlossen]


Ich bin ein relativ Neuling in Networking-Welt, obwohl ich Codierung und weiß einige Systemadministrator-Hintergrund für eine lange Zeit. und hier bin ich nur einen Schritt von meinem Ziel entfernt.

Das ganze Bild ist: Zuhause benutze ich einen LinkSys E3000 als Gateway (weiß noch nicht, ob das der Name ist), WLAN-AP und keine anderen Routing / Switching-Geräte. Es dient 1 PC und 1 Mac mit LAN, 1 Mac Mini + 1 iPad + 2 Smartphones mit WIFI.

Mein Ziel ist es, einen Openvpn-Client auf dem E3000 (mit Tomaten-Firmware) zu verwenden und den gesamten WLAN-Verkehr meines iPad und Smartphones durch ihn zu leiten, und die Routen anderer Geräte bleiben auf der gleichen Nicht-OpenVPN-Route.

Bis jetzt bin ich in der Lage, openvpn Klienten auf E3000 an einen openvpn Server anzuschließen, den gesamten Verkehr aller meiner Geräte durch diese openvpn Verbindung tunneln. Was übrig bleibt, ist, wie man selektiv durch Quell-IP (zumindest in meinem Rat) zum Tunnel routet, während andere nicht gestört werden.

Ich hatte in den letzten Tagen einige "iptables" und "route" gelernt, allerdings ohne viel Glück, also kommt meine Frage. Hier sind einige Informationen, die Ihnen helfen werden, die Struktur zu bekommen.

ifconfig -a Ausgabe, einige nutzlose Zeilen gestreift, und in der Web-Schnittstelle C0: C1: C0: 1A: E0: 28 ist WAN, C0: C1: C0: 1A: E0: 27 ist LAN, C0: C1: C0: 1A : E0: 29 ist 2.4G wifi AP, C0: C1: C0: 1A: E0: 2A ist 5G wifi AP.

root @ router: / tmp / home / root # ifconfig -a

br0 Link encap: Ethernet HWaddr C0: C1: C0: 1A: E0: 27
             inet Adr: 192.168.1.1 Bcast: 192.168.1.255 Maske: 255.255.255.0              UP RUNNING MULTICAST MTU: 1500 Metrisch: 1

eth0 Link encap: Ethernet HWaddr C0: C1: C0: 1A: E0: 27
             UP RUNNING MULTICAST MTU: 1500 Metrisch: 1

eth1 Link Encap: Ethernet HWaddr C0: C1: C0: 1A: E0: 29
             UP RUNNING ALLMULTI MULTICAST MTU: 1500 Metrisch: 1

eth2 Link Encap: Ethernet HWaddr C0: C1: C0: 1A: E0: 2A
             UP RUNNING ALLMULTI MULTICAST MTU: 1500 Metrisch: 1

lo Link encap: Lokale Schleife
             inet Adr: 127.0.0.1 Maske: 255.0.0.0              inet6 addr: :: 1/128 Scope: Host

ppp0 Link encap: Punkt-zu-Punkt-Protokoll
             inet Adr: 172.200.1.43 P-t-P: 172.200.0.1 Maske: 255.255.255.255              UP POINTOPOINT LAUF MULTICAST MTU: 1480 Metrisch: 1

vlan1 Link encap: Ethernet HWaddr C0: C1: C0: 1A: E0: 27
             UP RUNNING ALLMULTI MULTICAST MTU: 1500 Metrisch: 1

vlan2 Link encap: Ethernet HWaddr C0: C1: C0: 1A: E0: 28
             UP RUNNING MULTICAST MTU: 1500 Metrisch: 1

wl0.1 Link encap: Ethernet HWaddr C0: C1: C0: 1A: E0: 29
             BROADCAST MULTICAST MTU: 1500 Metrisch: 1

brctl zeige Ausgabe

root@router:/tmp/home/root# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.c0c1c01ae027   no      vlan1
                            eth1
                            eth2

vor dem OpenVPN Rout-Up-Skript

root@router:/tmp/home/root# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.200.0.1     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 br0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         172.200.0.1     0.0.0.0         UG    0      0        0 ppp0

openvpn Server drücken

PUSH: Received control message: 'PUSH_REPLY,redirect-gateway,dhcp-option DNS 8.8.8.8,route 172.20.0.1,topology net30,ping 10,ping-restart 120,ifconfig 172.20.0.6 172.20.0.5'

openvpn's Rout-Up-Skript

Apr 24 14:52:06 router daemon.notice openvpn[1768]: /sbin/ifconfig tun11 172.20.0.6 pointopoint 172.20.0.5 mtu 1500
Apr 24 14:52:08 router daemon.notice openvpn[1768]: /sbin/route add -net 72.14.177.29 netmask 255.255.255.255 gw 172.200.0.1
Apr 24 14:52:08 router daemon.notice openvpn[1768]: /sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 172.20.0.5
Apr 24 14:52:08 router daemon.notice openvpn[1768]: /sbin/route add -net 128.0.0.0 netmask 128.0.0.0 gw 172.20.0.5
Apr 24 14:52:08 router daemon.notice openvpn[1768]: /sbin/route add -net 172.20.0.1 netmask 255.255.255.255 gw 172.20.0.5

Route nach openvpn

root@router:/tmp/home/root# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.20.0.5      0.0.0.0         255.255.255.255 UH    0      0        0 tun11
72.14.177.29    172.200.0.1     255.255.255.255 UGH   0      0        0 ppp0
172.200.0.1     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
172.20.0.1      172.20.0.5      255.255.255.255 UGH   0      0        0 tun11
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 br0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         172.20.0.5      128.0.0.0       UG    0      0        0 tun11
128.0.0.0       172.20.0.5      128.0.0.0       UG    0      0        0 tun11
0.0.0.0         172.200.0.1     0.0.0.0         UG    0      0        0 ppp0

etwas, was ich bemerkt und versucht hatte: * Auf der Weboberfläche des Openvpn Clients gibt es die Option "NAT im Tunnel erstellen", wenn ich dies überprüfe, gibt es das folgende Skript (wahrscheinlich ausgeführt nach der Herstellung der openvpn Verbindung)

root@router:/tmp/home/root# cat /tmp/etc/openvpn/fw/client1-fw.sh
#!/bin/sh
iptables -I INPUT -i tun11 -j ACCEPT
iptables -I FORWARD -i tun11 -j ACCEPT
iptables -t nat -I POSTROUTING -s 192.168.1.0/255.255.255.0 -o tun11 -j MASQUERADE

Wenn ich diese Option deaktiviere, wird die letzte Zeile nicht angezeigt. Dann denke ich, dass das Problem möglicherweise durch iptables und NAT-bezogene Befehle gelöst wird, ich habe einfach nicht genug Wissen, um sie herauszufinden. Ich habe versucht rennen

iptables -t nat -I POSTROUTING -s 192.168.1.6 -o tun11 -j MASQUERADE

manuell nach openvpn verbunden (192.168.1.6 ist die IP-Adresse meines iPad), dann mein iPad Internet mit openvpn Tunnel bekommen, aber alle anderen Geräte können nicht ins Internet gelangen.

Falls nötig, hier sind die iptables über NAT

root@router:/tmp/home/root# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            192.168.1.0/24      
WANPREROUTING  all  --  0.0.0.0/0            172.200.1.43        
upnp       all  --  0.0.0.0/0            172.200.1.43        

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0           
SNAT       all  --  192.168.1.0/24       192.168.1.0/24      to:192.168.1.1 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain WANPREROUTING (1 references)
target     prot opt source               destination         
DNAT       icmp --  0.0.0.0/0            0.0.0.0/0           to:192.168.1.1 

Chain upnp (1 references)
target     prot opt source               destination         
DNAT       udp  --  0.0.0.0/0            0.0.0.0/0       udp dpt:5353 to:192.168.1.3:5353 

Vielen Dank im Voraus für das Helfen und Lesen so viel, ich hoffe, ich habe jede Info gemacht, die Sie brauchen, um eine Hilfe zu geben :)


6
2018-04-24 07:07


Ursprung


Zu Ihrer Information, ich benutze Tomate Firmware RAF mod, victek.is-a-geek.com/tomaten.html - kcome


Antworten:


Ob diese Firmware iproute2 unterstützt, die mehr als eine Routentabelle unterstützt, basiert auf src ip.

echo "200 ovpn" >> /etc/iproute2/rt_tables
ip rule add from YOUR.WIFI.IP.S table ovpn

und fügen Sie eine Routenregel für die Tabelle hinzu

ip route add default via VPN.ROUTE.IP.ADDR dev vpn_dev table ovpn
ip route flush cache

Sie können dies bedenken: Linux Advanced Routing & Traffic Control HOWTO: http://lartc.org/howto/index.html

Oder, wie Sie Chinesisch sind, können Sie meinen Blog zu diesem Thema lesen: http://wangxu.me/blog/p/675

Hoffe, das könnte helfen


2
2018-04-24 07:26



sehr aufschlussreiche antwort :) aber schließlich habe ich eine zweite tabelle für nicht-vpn routen gesetzt. vielen Dank :) - kcome


Ich habe es endlich geschafft :-)

Ich benutze v1.28.9054 MIPSR2-beta K26 USB vpn3.6, sollte aber an anderen arbeiten, da es sich um Netzwerke handelt.

OpenVPN möchte all dein Routing einrichten, du musst damit aufhören ...

In VPN-Tunneling / Client / Basis

Deaktivieren Sie "NAT im Tunnel erstellen"    In VPN Tunneling / Client / Erweitert

Deaktivieren Sie "Internet-Verkehr umleiten"

Benutzerdefinierte Konfiguration, fügen Sie die Zeile: route-nopull hinzu

Stellen Sie in Administration / Scripts / Firewall sicher, dass Sie Folgendes haben:

iptables -I FORWARD -i br0 -o tun11 -j ACCEPT
iptables -I FORWARD -i tun11 -o br0 -j ACCEPT
iptables -I INPUT -i tun11 -j REJECT
iptables -t nat -A POSTROUTING -o tun11 -j MASQUERADE

Reboot, und Viola, du hast nichts ...

Dann, in einem VPN-up-Skript (Beste Wahl), oder wenn Sie Ihr VPN mit WAN starten, geben Sie Ihre Administration / Scripts / WANUP ein

sleep 30
ip route flush table 200
ip route flush cache
ip rule add from 192.168.1.11 lookup 200
ip rule add from 192.168.1.13 lookup 200
VPN_GW=`ifconfig tun11 | awk '/inet addr/ {split ($2,A,":"); print A[2]}'`
ip route add table 200 default via $VPN_GW dev tun11

Dies ist wahrscheinlich nicht der "beste" oder "richtige" Weg, es zu tun, aber es funktioniert. Jetzt nur 192.168.1.11 und 192.168.2.13 wird durch den OpenVPN-Tunnel gehen. Alle anderen Geräte und ihr Verkehr wird lokal gehen.

Dies war extrem wichtig für mich, da ich nicht wollte, dass mein Übertragungsstrom über das VPN ging. Ein Typ wie SgtPepperKSU schaut sich das an und lacht wahrscheinlich ... Wie auch immer, von einem Routing-Noob zum anderen ...


4
2018-06-01 15:06



Tut mir leid, nur noch eine Sache, vielleicht möchtest du das "30" etwas länger machen, bis deine tun11-Schnittstelle tatsächlich von OpenVPN erstellt wurde. Oder wenn Sie es schaffen, es in ein OpenVPN up Skript zu bringen, wäre das das Beste. - Quint


Ich habe die Dinge etwas anders gemacht, aber immer noch das Gleiche geschafft. Ich dachte, ich würde es hier teilen.

Ich habe meinen Tomato Router als OpenVPN Client eingerichtet, so dass er den gesamten Internetverkehr durch das VPN leitet. Ich habe den Dienst von StrongVPN.com für diesen Zweck benutzt und sie haben Schritt-für-Schritt-Anweisungen gegeben, so dass es ziemlich einfach war, diesen Teil in Gang zu bringen. Google "Tomato OpenVPN Setup Tutorial StrongVPN" und Sie werden es finden

Aber das "selektive Routing nur bestimmte Hosts" war sehr schwierig.

Am Ende habe ich es als "WAN UP" Skript implementiert (In der Tomato GUI: Administration-> Scripts-> WAN UP). Der Code unten ist, was ich in diese Kiste lege. Es hat viele Kommentare zu erklären, was vor sich geht. Es basiert stark auf dem Code, den ich hier gefunden habe:

http://linksysinfo.org/index.php?threads/route-only-specific-ports-through-vpn-openvpn.37240/

Und diesen Artikel zu lesen war sehr hilfreich:

http://linux-ip.net/html/adv-multi-internet.html

Hier ist der Code:

# This code goes in the WAN UP section of the Tomato GUI.
#
# This script configures "selective" VPN routing. Normally Tomato will route ALL traffic out
# the OpenVPN tunnel. These changes to iptables allow some outbound traffic to use the VPN, and some
# traffic to bypass the VPN and use the regular Internet instead.
#
#  To list the current rules on the router, issue the command:
#      iptables -t mangle -L PREROUTING
#
#  Flush/reset all the rules to default by issuing the command:
#      iptables -t mangle -F PREROUTING
#

#
# First it is necessary to disable Reverse Path Filtering on all
# current and future network interfaces:
#
for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
      echo 0 > $i
done

#
# Delete and table 100 and flush any existing rules if they exist.
#
ip route flush table 100
ip route del default table 100
ip rule del fwmark 1 table 100
ip route flush cache
iptables -t mangle -F PREROUTING

#
# Copy all non-default and non-VPN related routes from the main table into table 100.
# Then configure table 100 to route all traffic out the WAN gateway and assign it mark "1"
#
# NOTE: Here I assume the OpenVPN tunnel is named "tun11".
#
#
ip route show table main | grep -Ev ^default | grep -Ev tun11 \
  | while read ROUTE ; do
      ip route add table 100 $ROUTE
done
ip route add default table 100 via $(nvram get wan_gateway)
ip rule add fwmark 1 table 100
ip route flush cache

#
# Define the routing policies for the traffic. The rules will be applied in the order that they
# are listed. In the end, packets with MARK set to "0" will pass through the VPN. If MARK is set
# to "1" it will bypass the VPN.
#
# EXAMPLES:
#
#  All LAN traffic will bypass the VPN (Useful to put this rule first, so all traffic bypasses the VPN and you can configure exceptions afterwards)
#    iptables -t mangle -A PREROUTING -i br0 -j MARK --set-mark 1
#  Ports 80 and 443 will bypass the VPN
#    iptables -t mangle -A PREROUTING -i br0 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 1
#  All traffic from a particular computer on the LAN will use the VPN
#    iptables -t mangle -A PREROUTING -i br0 -m iprange --src-range 192.168.1.2 -j MARK --set-mark 0
#  All traffic to a specific Internet IP address will use the VPN
#    iptables -t mangle -A PREROUTING -i br0 -m iprange --dst-range 216.146.38.70 -j MARK --set-mark 0
#  All UDP and ICMP traffic will bypass the VPN
#    iptables -t mangle -A PREROUTING -i br0 -p udp -j MARK --set-mark 1
#    iptables -t mangle -A PREROUTING -i br0 -p icmp -j MARK --set-mark 1

# By default all traffic bypasses the VPN
iptables -t mangle -A PREROUTING -i br0 -j MARK --set-mark 1

# Spotify explicitly uses the VPN
iptables -t mangle -A PREROUTING -i br0 -m iprange --dst-range 78.31.8.1-78.31.15.254 -j MARK --set-mark 0
iptables -t mangle -A PREROUTING -i br0 -m iprange --dst-range 193.182.8.1-193.182.15.254 -j MARK --set-mark 0

4
2017-11-17 22:51



Schöne detaillierte Antwort, hoffe, mehr von Ihnen zu sehen! - vgoff
Nett. Jetzt stellen Sie VPN als Standard ein, aber schließen Sie alles außer Spotify aus. Wäre es möglich, anders herum zu definieren: normales WAN ist Standard und verwendet VPN nur für Spotify. Ich möchte nicht riskieren, dass eine falsche Regel dazu führt, dass mein gesamter Traffic über das VPN geht. - Zyphrax
@Zyphrax, Nein, das Beispiel ist umgekehrt. Das Beispiel ist, was Sie möchten: VPN für spotify, der Rest geht umgangen. - droidgren