Ok, here is what I have tried, would like a check on what I have done, if there is any better way
Starlink exposes a GPRC API on port 9200
grpcurl -v -plaintext -d '{"get_status":{}}' 10.0.0.1:9200 SpaceX.API.Device.Device/Handle
grpcurl -v -plaintext -d '{"get_status":{}}' 10.0.0.2:9200 SpaceX.API.Device.Device/Handle
Both Return something like .. (Different Device Ids’ so I guess its working)
Response contents:
{
"apiVersion": "10",
"dishGetStatus": {
"deviceInfo": {
"id": "ut01000000-00000000-0052771d",
"hardwareVersion": "rev3_proto2",
"softwareVersion": "07dd2798-ff15-4722-a9ee-de28928aed34.uterm.release",
"countryCode": "PH",
"utcOffsetS": 28801,
"bootcount": 295,
"generationNumber": "1702353424"
},
"deviceState": {
"uptimeS": "179520"
},
"obstructionStats": {
"fractionObstructed": 0.009813944,
"validS": 178731,
"avgProlongedObstructionDurationS": 1.237146,
"avgProlongedObstructionIntervalS": 2057.1428,
"timeObstructed": 0.0020375866,
"patchesValid": 4891
},
"alerts": {},
"downlinkThroughputBps": 126768.64,
"uplinkThroughputBps": 123648.08,
"popPingLatencyMs": 27.15,
"boresightAzimuthDeg": -0.78238267,
"boresightElevationDeg": 76.72383,
"gpsStats": {
"gpsValid": true,
"gpsSats": 13
},
"ethSpeedMbps": 1000,
"isSnrAboveNoiseFloor": true,
"readyStates": {
"cady": true,
"scp": true,
"l1l2": true,
"xphy": true,
"aap": true,
"rf": true
},
"softwareUpdateState": "IDLE",
"disablementCode": "OKAY",
"hasSignedCals": true,
"softwareUpdateStats": {
"softwareUpdateState": "IDLE"
},
"alignmentStats": {
"tiltAngleDeg": 13.092309,
"boresightAzimuthDeg": -0.78238267,
"boresightElevationDeg": 76.72383,
"attitudeEstimationState": "FILTER_CONVERGED",
"attitudeUncertaintyDeg": 0.4333455,
"desiredBoresightAzimuthDeg": 0.23636001,
"desiredBoresightElevationDeg": 75.96587
},
"initializationDurationSeconds": {
"attitudeInitialization": 172,
"burstDetected": 71,
"ekfConverged": 213,
"firstCplane": 115,
"firstPopPing": 127,
"gpsValid": 37,
"initialNetworkEntry": 71,
"networkSchedule": 118,
"rfReady": 38,
"stableConnection": 140
},
"config": {
"snowMeltMode": "ALWAYS_OFF",
"applySnowMeltMode": true,
"applyLocationRequestMode": true,
"applyLevelDishMode": true,
"applyPowerSaveStartMinutes": true,
"applyPowerSaveDurationMinutes": true,
"applyPowerSaveMode": true
}
}
}
I can get a ping to both 10.0.0.1 and 10.0.0.2
/ip address
add address=192.168.100.100/24 interface=eth1-Starlink1 network=192.168.100.0
add address=192.168.100.101/24 interface=eth2-Starlink2 network=192.168.100.0
/ip firewall address-list
add address=10.0.0.1 list=translate-to-starlink
add address=10.0.0.2 list=translate-to-starlink
/routing table
add disabled=no name=starlink1-table fib
add disabled=no name=starlink2-table fib
/ip firewall mangle
add action=mark-connection chain=prerouting connection-mark=no-mark dst-address=10.0.0.1 new-connection-mark=starlink1 passthrough=yes
add action=mark-connection chain=prerouting connection-mark=no-mark dst-address=10.0.0.2 new-connection-mark=starlink2 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=starlink1 new-routing-mark=starlink1-table passthrough=no
add action=mark-routing chain=prerouting connection-mark=starlink2 new-routing-mark=starlink2-table passthrough=no
/ip firewall nat
add action=masquerade chain=srcnat out-interface=eth1-Starlink1
add action=masquerade chain=srcnat out-interface=eth2-Starlink2
add action=dst-nat chain=dstnat dst-address-list=translate-to-starlink to-addresses=192.168.100.1
/ip route
add distance=1 dst-address=192.168.100.0/24 gateway=eth1-Starlink1 routing-table=starlink1-table
add distance=1 dst-address=192.168.100.0/24 gateway=eth2-Starlink2 routing-table=starlink2-table
Interfaces
eth1-Starlink1
eth2-Starlink2