test(java-oracle): NatRun records the home router's NAT as Java FILIUS runs it
ScenarioNetwork builds home routers (their first card the WAN port) and their port forwarding (portForwarding, through GatewayFirmware.setStaticNAT). NatRun plays six stories on nat-home's network and writes the frames, the calls and the router's NAT table: a ping, a UDP exchange, the same socket to a second server (whose answer never reaches the LAN: Java keeps one entry per LAN endpoint, for the first remote only), a TCP connection out, a forwarded one in, and pings at the WAN address and past it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -375,3 +375,39 @@ Gemessen (30.09.2026, dazu die Pausenformel am JDK):
|
||||
Nachbarn vor seinem ersten Beacon hört, sendet die gelernte Route gleich
|
||||
mit. Senden mehrere zugleich, fehlt im Lauscher mancher eigene Frame.
|
||||
|
||||
## NAT zur Laufzeit
|
||||
|
||||
`NatRun` startet das Netz von `nat-home` (PC 192.168.0.10 am LAN-Port des
|
||||
Heimrouters 192.168.0.1; sein WAN-Port 42.0.0.10/8 an einem Switch mit
|
||||
42.0.0.20 und 42.0.0.30; Portweiterleitung TCP 8080 an 192.168.0.10:80;
|
||||
`ScenarioNetwork` baut Heimrouter und das Feld `portForwarding` über
|
||||
`GatewayFirmware.setStaticNAT`) und schreibt nach `nat-java-<ablauf>.java.json`
|
||||
die Frames, die Aufrufe und am Ende die NAT-Tabelle des Heimrouters. Abläufe:
|
||||
`pingOut`, `udpOut` (Antwort vom Server), `udpTwoRemotes` (danach vom selben
|
||||
Port an 42.0.0.30), `tcpOut`, `forward` (von 42.0.0.20 an 42.0.0.10:8080),
|
||||
`pingWan` (42.0.0.20 pingt die WAN-Adresse, dann 192.168.0.10).
|
||||
|
||||
Ein UDP-Server im Werkzeug ist ein aktiver Socket auf Port 7: ein passiver
|
||||
trägt seinen Port erst ein, wenn Daten da sind, die vorher nicht ankommen.
|
||||
|
||||
Gemessen (30.09.2026), was der Heimrouter tut (`NatGateway`, dessen
|
||||
Threads zwischen Karte und Ethernet-Schicht sitzen):
|
||||
|
||||
* Ausgehend (Ziel außerhalb des LAN, nicht die WAN-Adresse) wird die
|
||||
Absenderadresse zur WAN-Adresse, der Port zu einem freien Port des
|
||||
Heimrouters (nach Javas Zufall); ICMP behält seine Kennung, die als Port
|
||||
des Eintrags dient. Einen Eintrag legt ein TCP-SYN, jedes UDP-Datagramm
|
||||
und jedes ICMP-Paket an, aber nur, wenn der LAN-Endpunkt noch keinen hat.
|
||||
* Eingehend an die WAN-Adresse sucht der Heimrouter den Eintrag nach
|
||||
Gegenstelle, WAN-Port und Protokoll, sonst nach der Portweiterleitung, die
|
||||
dann einen dynamischen Eintrag für die Gegenstelle anlegt
|
||||
(`DynamicEnryFromStatic`).
|
||||
* Ein zweiter Server, an den derselbe LAN-Endpunkt sendet, bekommt das
|
||||
Datagramm mit demselben WAN-Port, seine Antwort aber findet keinen Eintrag
|
||||
(der gilt nur für die erste Gegenstelle) und kommt nicht ins LAN.
|
||||
* Ein Ping an die WAN-Adresse beantwortet der Heimrouter, einer an eine
|
||||
LAN-Adresse von außen verschwindet.
|
||||
* Dynamische Einträge verfallen nach 300 s mal Javas Verzögerungsfaktor
|
||||
(bei 90 % 55 Minuten), geprüft jede Sekunde, aufgefrischt nur von
|
||||
eingehenden Paketen (aus dem Code, nicht gemessen).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user