mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-08-30 05:50:12 +03:00
This section was misleading - the actual root cause is host=0.0.0.0 causing controller to register as 127.0.0.1, not hostname resolution. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
115 lines
3.3 KiB
Markdown
115 lines
3.3 KiB
Markdown
<!--
|
|
SPDX-License-Identifier: CC-BY-SA-4.0
|
|
See LICENSE file for licensing information.
|
|
-->
|
|
|
|
> This documentation is organized by AI with reference to actual code. AI can make mistakes — please verify against the source code when in doubt.
|
|
|
|
|
|
# Controller + Compute Setup
|
|
|
|
This document describes the minimum configuration required to set up a GNS3 Controller with remote Compute nodes.
|
|
|
|
## Architecture Overview
|
|
|
|
- **Compute**: Runs individual nodes (QEMU, Docker, etc.) and provides resource monitoring
|
|
- **Controller**: Manages multiple computes, projects, and provides the REST API
|
|
- **Database**: Controller uses SQLite to store projects, nodes, and compute registration
|
|
|
|
## Minimum Configuration
|
|
|
|
### 1. Compute Node Configuration
|
|
|
|
Create the configuration file at `~/.config/GNS3/3.1/gns3_server.conf`:
|
|
|
|
```ini
|
|
[Server]
|
|
host = 0.0.0.0
|
|
port = 3080
|
|
compute_username = gns3
|
|
compute_password = gns3
|
|
```
|
|
|
|
Start the Compute:
|
|
```bash
|
|
gns3server
|
|
```
|
|
|
|
### 2. Controller Node Configuration
|
|
|
|
Create the configuration file at `~/.config/GNS3/3.1/gns3_server.conf`:
|
|
|
|
```ini
|
|
[Server]
|
|
host = 192.168.1.140
|
|
port = 3080
|
|
compute_username = gns3
|
|
compute_password = gns3
|
|
```
|
|
|
|
Start the Controller:
|
|
```bash
|
|
gns3server
|
|
```
|
|
|
|
### 3. Register Compute with Controller
|
|
|
|
Use the API to register a remote compute:
|
|
|
|
```bash
|
|
POST /v3/computes
|
|
{
|
|
"protocol": "http",
|
|
"host": "192.168.1.x",
|
|
"port": 3080,
|
|
"user": "gns3",
|
|
"password": "gns3"
|
|
}
|
|
```
|
|
|
|
## Important Notes
|
|
|
|
### Host Configuration
|
|
|
|
- **Controller `host`**: If set to `0.0.0.0`, the controller will register itself as `127.0.0.1`, which breaks remote compute connections
|
|
- **Symptom**: Compute nodes report "No common subnet for compute X (controller) and Y" even when on the same network
|
|
- **Solution**: Always use the actual LAN IP address for the Controller's `host` field (e.g., `host = 192.168.1.104`)
|
|
- **Dynamic IP**: If the controller machine uses DHCP, set a static lease on the router or use mDNS (`.local` domain)
|
|
|
|
### Password Configuration
|
|
|
|
- If `compute_password` is not set, a random 16-character password is auto-generated on startup
|
|
- The Controller must use the same credentials as the Compute's configuration
|
|
|
|
### Network Requirements
|
|
|
|
- Controller and Compute must be on the same LAN for cross-compute links to work
|
|
- UDP tunnel is used for cross-compute links, requiring network connectivity on UDP ports
|
|
|
|
### Configuration File Location
|
|
|
|
- Default location: `~/.config/GNS3/3.1/gns3_server.conf`
|
|
- Version `3.0` uses `~/.config/GNS3/3.0/`
|
|
|
|
## Troubleshooting
|
|
|
|
### 401 Unauthorized on Compute Connect
|
|
|
|
1. Check that Compute's `compute_username` and `compute_password` match what was passed to the API
|
|
2. Verify the Compute's configuration file is correctly loaded
|
|
3. Ensure the `[Server]` section is used (not `[Controller]`)
|
|
|
|
### No Common Subnet Error
|
|
|
|
If compute nodes report:
|
|
```
|
|
Cannot get an IP address on same subnet: No common subnet for compute X (controller) and Y
|
|
```
|
|
|
|
1. **Primary cause**: Controller's `host` is set to `0.0.0.0` - it registers as `127.0.0.1` which is unreachable from compute nodes
|
|
2. Check the controller's `/v3/version` endpoint - if `controller_host` shows `127.0.0.1`, this is the issue
|
|
3. Set the Controller's `host` to its actual LAN IP address (e.g., `192.168.1.104`)
|
|
4. Verify both machines are on the same network and can ping each other
|
|
5. Check firewall rules allow TCP/UDP communication on required ports
|
|
|