Skip to content

Homelab - Next Terminal, a Bastion Host Supporting Multiple Protocols

Next Terminal is an easy-to-use bastion host that integrates Apache Guacamole, a clientless remote desktop gateway solution, supporting various protocols such as RDP, SSH, VNC, TELNET, and Kubernetes. It allows direct web access to internal network resources and offers excellent cross-platform compatibility. Next Terminal also supports Multi-Factor Authentication (MFA) for login, audit recording, and other features.

Deployment (Docker Compose)

To begin, create a compose.yaml file and paste the following content:

compose.yaml
version: "3.3"
services:
  guacd:
    container_name: ${STACK_NAME}_guacd
    image: dushixiang/guacd:${GUACD_VERSION}
    volumes:
      - ${STACK_DIR}/data:/usr/local/next-terminal/data
    restart: always
  next-terminal:
    container_name: ${STACK_NAME}_app
    image: dushixiang/next-terminal:${APP_VERSION}
    environment:
      DB: sqlite
      GUACD_HOSTNAME: ${APP_GUACD_HOSTNAME}
      GUACD_PORT: ${APP_GUACD_PORT}
    ports:
      - ${APP_PORT}:8088
    volumes:
      - /etc/localtime:/etc/localtime
      - ${STACK_DIR}/data:/usr/local/next-terminal/data
    restart: always

(Optional) It is recommended to create a .env file at the same level as compose.yaml and customize your environment variables. If you prefer not to use environment variables, you can directly customize your parameters within compose.yaml (e.g., replacing ${STACK_NAME} with next-terminal).

.env
STACK_NAME=next-terminal
STACK_DIR=xxx # Customize your project storage path, e.g., ./next-terminal

# next-terminal
APP_VERSION=latest
APP_PORT=xxxx # Choose an available access port
APP_GUACD_HOSTNAME=guacd # Default
APP_GUACD_PORT=4822 # Default

# guacd
GUACD_VERSION=latest

Finally, execute the docker compose up -d command in the directory where compose.yaml is located to start the orchestrated containers.

Configuration Details

Initial account/password: admin.

References and Acknowledgments

[Placeholder 1] [Placeholder 2]

This post is translated using ChatGPT, please feedback if any omissions.