Granulares Routing mit iptables und iproute2 über VPN

631
darkdragn

Bei einem Host in meinem Haus habe ich einen Host für ein VPN, das ich für einige Zwecke benötige. Da ich zeitweise in Japan lebte, funktioniert es als NAT für einige Geräte, sodass ich meinen NETFLIX und einige andere Dienste weiterhin verwenden kann. Ich möchte jedoch, dass dieser Server weiterhin das normale Netz für Downloads / Surfen im Internet verwendet. Derzeit ist das Folgende eine Barebones-Kopie meiner Konfiguration:

IP-Regel zeigen

0: from all lookup local 32764: from all fwmark 0x1 lookup 10 32767: from all lookup main 32768: from all lookup default 

ip route show table 10

default dev ppp0 scope link 

iptables-save

*mangle :PREROUTING ACCEPT [11:822] :INPUT ACCEPT [11:822] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [8:872] :POSTROUTING ACCEPT [8:872] -A OUTPUT -s 192.168.1.102 -j MARK --set-mark 0x1 COMMIT *nat :PREROUTING ACCEPT [2831:752380] :POSTROUTING ACCEPT [107531:7116617] :OUTPUT ACCEPT [107652:7124121] -A POSTROUTING -o eth0 -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [41463962:7467495526] -A FORWARD -i eth0 -p ppp+ -j ACCEPT -A FORWARD -i ppp+ -o eth0 -j ACCEPT COMMIT 

Ich möchte anmerken, dass meine tatsächliche iptables-Konfiguration komplizierter ist, um ein paar Protokollanweisungen für neue Verbindungen der FORWARD-Seite des Hauses aufzunehmen und um zu viele Protokolle zu vermeiden, gibt es vor dem Protokoll eine generelle Annahme für ESTABLISHED, RELATED-Verbindungen Anweisung und weitere IP-Adressen in der Mangle-Tabelle. Diese Konfiguration hat ihren Zweck für meine Geräte, jedoch habe ich gerade versucht, von einer Fernbedienung aus in sie einzudringen und kann dies nicht. Der Grund liegt auf der Hand, die Antworten meines SSH-Dienstes werden von eth0 anstatt von ppp0 weitergeleitet. Was bringt mich zu meiner Frage.

Es ist möglich, fwmark 1 auf alle Sitzungen anzuwenden, die über ppp0 erstellt wurden. Ich weiß, dass conntrack durch ein wenig Graben Übereinstimmungen basierend auf der Quell-IP des Ursprungshosts der Sitzung durchführen kann, aber kann ich etwas Ähnliches für den Ursprungsentwickler tun?

Das übergeordnete Ziel besteht darin, dass ssh über das private Subnetz, meine ursprüngliche IP-Adresse (japanische IP 204.xxx.xxx.xxx) oder die IP-Adresse des vpn (23.xxx.xxx.xxx) ausgeführt werden kann, ohne die Konfiguration ständig zu ändern. Eine inelegante Lösung, die nur ssh über das private und das VPN zulässt, würde fwmark auf jedes andere Subnetz als das 192.168.xxx.xxx anwenden, wobei sport 22 in der Tabelle "mangle" ist. Dies würde jedoch ssh über die japanische IP nicht zulassen .

0

1 Antwort auf die Frage

0
Timothy Baldwin

Verwenden Sie CONNMARK, um die Verbindungen zu markieren:

iptables -t mangle -A INPUT -i ppp+ -j CONNMARK --set-mark 0x1 iptables -t mangle -A OUTPUT -m connmark --mark 0x1 -j MARK --set-mark 0x1