Skip to content
Xumiao Zhang edited this page Feb 2, 2023 · 15 revisions

Welcome to some unofficial Starlink technical documentation!

This is a collection of information gathered while playing with and learning about our new best friend, Dishy! This is specifically focused on technical architecture. The plan is to break this page up into smaller pages as we flesh out the core of the content.

FAQ

A great place to start is the official FAQ and /r/Starlink FAQ.

What is Dishy?

Dishy is the starlink dish! Dishy has servos to automatically point themselves to the correct area of space. Dishy uses the 100ft long "black cable".

What is the router?

Starlink includes Dishy, a wifi router and a PoE injector. In its out of the box configuration, all you need to do is plug in the PoE injector and Dishy will automatically orient itself and setup Wifi. The router is connected to the PoE injector with the "white cable".

GRPC info

Dishy and the router expose GRPC interfaces, 192.168.100.1:9200 and 192.168.1.1:9000 respectively. They share the same GRPC client, but they do not both implement all the functions. For example, the router implements GetPing(), but Dishy does not.

Networking info

You can use Dishy without the provided wifi router. For example, you could plug your "white cable" directly into your laptop's ethernet and get a public IP address using DHCP. Dishy still has its own IP, at 192.168.100.1. You can confirm this by temporarily setting your laptop's ethernet port to 192.168.100.2/24 and you'll be able to still reach the 192.168.100.1 status page.

Using your own router

If you want to use your own router, simply plug the white cable into the WAN port of your router.

If you would still like to be able to access the Starlink status page on 192.168.100.1, you will need to do a little additional configuration and it will likely require a slightly more advanced router than the normal home wifi setup.

In general, you need to make IP address 192.168.100.1 reachable on the WAN port without routing through a gateway. The easiest way to do this on most consumer-grade routers is with a static route, but not all routers support the necessary configuration and the exact instructions will vary by manufacturer and model, but will often be located in an "Advanced" section.

Some users have reported better results using a static route with a 24-bit netmask, so even though only 192.168.100.1 needs to be reachable, the recommended static route configuration is:

  • Network IP: 192.168.100.0
  • Netmask: 255.255.255.0 (or /24 if specified in bits)
  • Gateway: none
  • Interface: WAN (some routers do not allow you to configure this, but work anyway)

The tricky part is usually how to specify no gateway. Some values to try are 0.0.0.0, leaving it blank, 192.168.100.1, and the router's WAN IP address. The router's WAN IP address can change from time to time, so use the others if possible.

The following configurations have been verified to work for specific router brands and/or firmware:

pfSense

There is a reddit thread on how to use pfSense to do this.

OPNSense

User /u/rmuck outlines the following steps for OPNSense:

OPNSense (version 20.7.4) Router Settings to use StarLink app without StarLink Router.

  • Create Virtual IP
    • Interfaces\Virtual IPs\Settings -> Add
      • Type: IP Alias
      • Virtual IP Address: 192.168.100.2/24
      • Interface: Your “WAN” interface
  • Create Outbound NAT (Might have to change Mode to “Manual” or Hybrid outbound NAT rule generation)
    • Firewall\NAT\Outbound -> Add
      • Interface: Your “WAN” interface
      • Source address: Internal Network NET
      • Destination address: “Single Host or Network” 192.168.100.1/32
      • Translation/Target: “192.168.100.2()”
  • Reboot OPNSense

EdgeOS / Ubiquity

WARNING: This is probably not what you want, see USG static route example which should be similar to EdgeOS configurations.

These are example entries in /config/config.boot that make the following assumptions:

  • WAN port is eth4
  • You local network is 192.168.1.1/24
interfaces {
...
    pseudo-ethernet peth4 {
        address 192.168.100.2/24
        description "access to dishy"
        link eth4
    }
}
service {
...
    nat {
    ...
        rule 5009 {
            description dishy
            destination {
                address 192.168.100.0/24
                group {
                }
            }
            log disable
            outbound-interface peth4
            outside-address {
            }
            protocol all
            source {
                address 192.168.1.0/24
                group {
                }
            }
            type masquerade
        }
    }
}

USG(Unifi Security Gateway) / Ubiquity

These are example entries in config.gateway.json that make the following assumptions:

  • WAN port is eth2
  • WAN failover/load balance is enabled(you can just configure the static route in the unifi network controller GUI if WAN failover/load balance is disabled)
  • You local network is network group corporate_network
{
        "firewall": {
                "modify": {
                        "LOAD_BALANCE": {
                                "rule": {
                                        "3000": {
                                                "action": "modify",
                                                "modify": {
                                                        "table": "1"
                                                },
                                                "protocol": "all",
                                                "source": {
                                                        "group": {
                                                                "network-group": "corporate_network"
                                                        }
                                                }
                                        }
                                }
                        }
                }
        },
        "protocols": {
                "static": {
                        "table": {
                                "1": {
                                        "interface-route": {
                                                "192.168.100.1/32": {
                                                        "next-hop-interface": {
                                                                "eth2": "''"
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
}

USG configure commands(EdgeOS should be similar):

set protocols static table 1 interface-route 192.168.100.1/32 next-hop-interface eth2
set firewall modify LOAD_BALANCE rule 3000 action modify
set firewall modify LOAD_BALANCE rule 3000 modify table 1
set firewall modify LOAD_BALANCE rule 3000 source group network-group corporate_network
set firewall modify LOAD_BALANCE rule 3000 protocol all

OpenWRT

This should apply to any router running OpenWRT firmware.

In the LuCI web UI, go to Network -> Static Routes. In the Static IPv4 Routes tab, add a route with the following settings:

  • Interface: wan (or whatever IPv4 interface is connected to the dish)
  • Target: 192.168.100.1
  • IPv4-Netmask: 255.255.255.255
  • IPv4-Gateway: 0.0.0.0

Leave everything else at default values. Save and apply.

Alternatively, if the LuCI UI is not available, you can add the following to your /etc/config/network file:

config route
        option interface 'wan'
        option gateway '0.0.0.0'
        option target '192.168.100.1'

NETGEAR Routers

NETGEAR routers running the stock firmware require setting the WAN IP as gateway address. There are specific details along with a screen shot in this reddit post.

Related Projects