[Gelöst] Hilfe bei Script für IPv6-Portfreigabe gesucht

u.g

Aktives Mitglied
Mitglied seit
27 Mrz 2005
Beiträge
1,619
Punkte für Reaktionen
29
Punkte
48
Hallo,

wie in folgendem verlinkten Thread bereits von anderen versucht,
würde ich gerne über Script (und fritzconnection o.ä.) für IPv6 einen Port auf meinem Raspberry im Heimnetz freigeben (für Zugriff von außen):

Link zum Thread

Die Freigabe für IPv4 klappt mit diesem Python-Script :
Code:
#!/usr/bin/python3

from fritzconnection import FritzConnection

fc = FritzConnection(
        address='192.168.179.1',
        user="user",
        password="geheim",
)

# Neuen Forward anlegen
args = {
    "NewRemoteHost": "0.0.0.0",
    "NewExternalPort": 9999,
    "NewProtocol": "TCP",
    "NewInternalPort": 9999,
    "NewInternalClient": "192.168.179.123",
    "NewEnabled": True,
    "NewPortMappingDescription": "test",
    "NewLeaseDuration": 0,
}

status = fc.call_action("WANPPPConnection1", "AddPortMapping", arguments=args)
print(status)

Aber bei
Code:
print(fc.call_action("WANIPv6Firewall1", "GetFirewallStatus"))
erhalte ich nicht wie hier "'InboundPinholeAllowed': True", sondern:
{'FirewallEnabled': True, 'InboundPinholeAllowed': False}

Vermutlich klappt daher
Code:
fc.call_action("WANIPv6Firewall1", "AddPinhole", RemoteHost="::", RemotePort=22, InternalClient="2001:1xxx:axxx:dxxx:cxxx:cxxx:7xxx:6xxx", InternalPort=22, Protocol=6, LeaseTime=0)
auch nicht, denn ich erhalte dann:
fritzconnection.core.exceptions.FritzConnectionException: UPnPError:
errorCode: 403
errorDescription: Not available Action

Ist meine Vermutung (InboundPinholeAllowed muss True liefern, damit das folgende klappt) richtig?
Wenn ja: wie kann ich das erreichen? Der genutzte Fritzbox-User hat alle Rechte.
Oder ist mein AddPinhole-Aufruf falsch?
Wird die Freigabe über die Fritzbox-Oberfläche angelegt, klappt es.
Ich möchte es aber über ein Script steuern.

Danke im voraus für eure Tipps und Hilfe.
 
Zuletzt bearbeitet:
Schade ... kein Feedback.

Aber die schönsten Probleme sind die, die man selbst löst ;)

nicht wie hier "'InboundPinholeAllowed': True"
Das ist nur dann "True", wenn "Selbstständige Portfreigaben für dieses Gerät" in der Fritzbox erlaubt ist. :)

Jetzt klappt es endlich so, wie ich es haben wollte:

Ich kann durch Anruf von Nummer A auf Nummer B (zuhause/Fritzbox) einen Port auf meinem Raspberry (über die Fritzbox) für (ssh-) Zugriff von außen freigeben
und die Freigabe so (Anruf auf andere Nummer) auch wieder beenden.

Das folgende Script holt sich (mit Hilfe von Fritzconnection) die IPv6-Adresse über ifconfig.co und fügt dann in der Fritzbox ein "Pinhole" für den Port 2345 an dieser IPv6 für 1 Stunde hinzu. Die für das optionale vorzeitige Entfernen des Pinholes nötige ID wird ausgegeben:
Python:
from fritzconnection import FritzConnection
import subprocess
import sys

result = subprocess.run(
    ["curl", "-s6", "ifconfig.co"],
    capture_output=True,
    text=True
)

ip = result.stdout.strip()

if not ip:
    print("Fehler bei curl-Aufruf")
    sys.exit(1)

fc = FritzConnection(
        address='192.168.179.1',
        user="user",
        password="secret",
        use_cache=True
)

state = fc.call_action(
        "WANIPv6Firewall1",
        "AddPinhole",
        RemoteHost="::",
        RemotePort=2345,
        InternalClient=ip,
        InternalPort=2345,
        Protocol=6,
        LeaseTime=3600
)

print(state["UniqueID"])



Ruft man das folgende Script mit (--id ... und) dieser ID auf, wird das Pinhole vorzeitig entfernt (sofern vorhanden, sonst Fehler):
Python:
from fritzconnection import FritzConnection
import argparse

parser = argparse.ArgumentParser(description="FritzBox Firewall Pinhole entfernen")
parser.add_argument(
    "--id",
    required=True,
    help="id"
)
args = parser.parse_args()

fc = FritzConnection(
        address='192.168.179.1',
        user="user",
        password="secret",
        use_cache=True
)

print(fc.call_action("WANIPv6Firewall1", "DeletePinhole", UniqueID=args.id))

([Fritzbox] address, user und password sollten vorher angepasst werden)
[Beide Scripte laufen auf meinem Raspberry]



Ein weiteres nützliches Tool für die Fritzbox sind übrigens die Fritz!Box Tools.
Aber Portfreigabe wie oben ist damit nicht möglich.



Erwähnte (und leider hier schlecht sichtbare) Links:


 
Zuletzt bearbeitet:
Kostenlos!

Statistik des Forums

Themen
248,868
Beiträge
2,303,389
Mitglieder
378,530
Neuestes Mitglied
fanboy