6.0 KiB
Codespaces Network Bridge
🧪 The extension is currently in Preview stage, so some hiccups are expected. Please help us to improve by submitting feedback!
This GitHub CLI extension allows to bridge network between a Codespace and your local machine, so the Codespace
can reach out to any remote resource that is reachable from your machine. In another words, it uses your local machine as a network gateway
to get to those resources.
For instance, if you are using a VPN
to connect to your enterprise network to access a database or any other remote resources on the private network, this extension allows you to get to those resources from within a Codespace, so that you can develop fully inside a Codespace!
Prerequisites
-
This extension depends on the latest features of GitHub CLI(>= v2.8.0), please make sure to upgrade it. If run the
gh codespace select
command opens the codespace selection dialog, you are good to go. -
The extension relies on
gh codespace ssh
command to establish SSH tunnel to a Codespace, hence you need to setup ssh keys if you didn't before. If you can dosudo gh codespace ssh
(sudo
is important since kernel might use different identity under non-root user) and connect to a Codespace successfully, - you are good to go. Refer to Generating a new SSH key and adding it to the ssh-agent for more info. -
If your Codespaces use non-default image, make sure that GitHub CLI and SSH server are installed inside the Codespaces. It might be as simple as adding
"github-cli": "latest"
and"sshd": "latest"
to the"feartures"
section of thedevcontainer.json
file!
Installation
Mac OSx:
gh extension install github/gh-net
Linux:
sudo gh extension install github/gh-net
The sudo
is required during extension installation on Linux due to https://github.com/cli/cli/issues/5456. Hopefully it won't be the case in the future.
Usage
To start network forwarding from a Codespace to a local machine, run:
sudo gh net start
Note:
sudo
privileges are required to bind to network sockets on your machine.
This will provide codespace selection dialog:
Select a codespace and press enter. The extension will connect to selected codespace and start forwarding network traffic:
There are two pannels in the connected view of the extension:
- Panel on the left (
NAT
) shows the network address translation table for currently opened connections. For stateful protocols(e.g.TCP
) the records are cleaned up automatically after connection is closed so the records will come and go as connection is established and closed. For stateless protocols (e.g.UDP
orICMP
) or unsuccessfulTCP
connections the records are cleaned up after some time, so those will show up in the list for some time. - Panel on the right (
DNS
) shows the resolvedDNS
records, ashostname
,record
andtime-to-live
(TTL
) values.
Press q
or ctrl + c
to stop the extension.
CLI Options
--gui
: Enanble/disable GUI mode. [true
|false
] [default:true
]--dns
: Enanble/disable DNS resolution. [true
|false
] [default:true
]--trace
: Specify tracing verbosity. [none
|trace
|debug
|info
|warn
|error
] [default:info
]
Run gh net start -h
for details.
Supported platforms
Mac OSx
Architecture | Local | Inside a Codespace |
---|---|---|
Intel | ✅ | 🙅 |
Apple | 🏃 | 🙅 |
Linux
Distro | Local | Inside Codespace |
---|---|---|
Ubuntu | ✅ | ✅ |
Debian | ✅ | ✅ |
Fedora | ? | ? |
Red Hat | ? | ? |
Mint | ? | ? |
OpenSUSE | ? | ? |
Centos | ? | ? |
Kali | ? | ? |
Raspberry Pi OS | ? | ? |
Alpine (bullseye) | ? | ✅ |
Windows
Version | Local | Inside a Codespace |
---|---|---|
Windows 10 | 🏃 | 🙅 |
Windows 11 | 🏃 | 🙅 |
Legend: ✅ - currently supported 🏃 - in progress 🙅 - not applicable ?
- unknown / not tested
For list of supported network protocols refer to this doc.
Troubleshooting
- Something is missing? Please create a ✨ feature request.
- Something is incorrect? Please create a 🐛 bug report.
- For list of known issues refer to 👉 this doc.