Upload 12 files
Browse files- Dockerfile +28 -0
- README.md +110 -10
- docker-compose.yml +27 -0
- entrypoint.sh +51 -0
- socks5-config/danted.conf +33 -0
- ssh-config/authorized_keys +1 -0
- ssh-config/new_tunneluser_key +49 -0
- ssh-config/new_tunneluser_key.pub +1 -0
- ssh-config/sshd_config +24 -0
- ssh-config/tunneluser_key +49 -0
- ssh-config/tunneluser_key.pub +1 -0
- test_report.md +59 -0
Dockerfile
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM ubuntu:22.04
|
| 2 |
+
|
| 3 |
+
RUN apt-get update && apt-get install -y \
|
| 4 |
+
openssh-server \
|
| 5 |
+
dante-server \
|
| 6 |
+
iptables \
|
| 7 |
+
iproute2 \
|
| 8 |
+
net-tools \
|
| 9 |
+
curl \
|
| 10 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 11 |
+
|
| 12 |
+
# Configure SSH
|
| 13 |
+
RUN mkdir -p /var/run/sshd
|
| 14 |
+
RUN useradd -m -s /bin/bash tunneluser
|
| 15 |
+
|
| 16 |
+
# Enable IP forwarding in /etc/sysctl.conf
|
| 17 |
+
RUN echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
|
| 18 |
+
RUN sysctl -p
|
| 19 |
+
|
| 20 |
+
WORKDIR /app
|
| 21 |
+
|
| 22 |
+
COPY . /app
|
| 23 |
+
|
| 24 |
+
RUN chmod +x entrypoint.sh
|
| 25 |
+
|
| 26 |
+
ENTRYPOINT ["./entrypoint.sh"]
|
| 27 |
+
|
| 28 |
+
|
README.md
CHANGED
|
@@ -1,10 +1,110 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Docker-based SSH/SOCKS5 NAT Gateway
|
| 2 |
+
|
| 3 |
+
This project sets up a Docker-based NAT Gateway using SSH Tunneling and a SOCKS5 proxy on Ubuntu 22.04. It allows you to route traffic from connected clients through the SOCKS5 proxy, which then uses the Docker host's internet connection with NAT.
|
| 4 |
+
|
| 5 |
+
## Project Structure
|
| 6 |
+
|
| 7 |
+
```
|
| 8 |
+
project-root/
|
| 9 |
+
├── Dockerfile
|
| 10 |
+
├── docker-compose.yml
|
| 11 |
+
├── entrypoint.sh
|
| 12 |
+
├── ssh-config/ # Contains SSH server configuration and authorized_keys
|
| 13 |
+
│ ├── sshd_config
|
| 14 |
+
│ ├── authorized_keys
|
| 15 |
+
│ └── tunneluser_key # Private key for SSH tunneling (KEEP THIS SECURE!)
|
| 16 |
+
│ └── tunneluser_key.pub # Public key for SSH tunneling
|
| 17 |
+
└── socks5-config/ # Contains Dante SOCKS5 server configuration
|
| 18 |
+
└── danted.conf
|
| 19 |
+
```
|
| 20 |
+
|
| 21 |
+
## Setup Instructions
|
| 22 |
+
|
| 23 |
+
### Prerequisites
|
| 24 |
+
|
| 25 |
+
- Docker installed on your Ubuntu 22.04 host.
|
| 26 |
+
- `docker-compose` (version 1.29.2 or later) installed.
|
| 27 |
+
- An SSH client on your local machine (e.g., OpenSSH client).
|
| 28 |
+
|
| 29 |
+
### 1. Clone the Repository (or create files manually)
|
| 30 |
+
|
| 31 |
+
If you receive a zip file, extract it. Otherwise, create the `project-root` directory and the files as structured above.
|
| 32 |
+
|
| 33 |
+
### 2. Build and Run the Docker Container
|
| 34 |
+
|
| 35 |
+
Navigate to the `project-root` directory in your terminal and run:
|
| 36 |
+
|
| 37 |
+
```bash
|
| 38 |
+
sudo docker-compose up --build -d
|
| 39 |
+
```
|
| 40 |
+
|
| 41 |
+
This command will:
|
| 42 |
+
- Build the Docker image (`ssh-socks-nat-gateway`).
|
| 43 |
+
- Start the `nat-gateway` service in detached mode (`-d`).
|
| 44 |
+
- Map host port `2222` to container SSH port `22`.
|
| 45 |
+
- Map host port `1080` to container SOCKS5 port `1080`.
|
| 46 |
+
- Mount the `ssh-config` and `socks5-config` directories into the container.
|
| 47 |
+
- Run the container with `NET_ADMIN` and `SYS_MODULE` capabilities and in privileged mode for network manipulation.
|
| 48 |
+
|
| 49 |
+
### 3. Verify the Setup
|
| 50 |
+
|
| 51 |
+
1. **Check Docker Container Status:**
|
| 52 |
+
```bash
|
| 53 |
+
sudo docker ps
|
| 54 |
+
```
|
| 55 |
+
You should see `nat-gateway` running.
|
| 56 |
+
|
| 57 |
+
2. **Check Container Logs:**
|
| 58 |
+
```bash
|
| 59 |
+
sudo docker logs nat-gateway
|
| 60 |
+
```
|
| 61 |
+
Look for messages indicating:
|
| 62 |
+
- "Detected public IP: YOUR_HOST_PUBLIC_IP" (the IP of your host machine)
|
| 63 |
+
- "SSH server started."
|
| 64 |
+
- "Dante SOCKS5 server started."
|
| 65 |
+
- "iptables NAT rules set."
|
| 66 |
+
|
| 67 |
+
### 4. Connect and Use the SOCKS5 Proxy
|
| 68 |
+
|
| 69 |
+
**A. Get your Host's Public IP:**
|
| 70 |
+
|
| 71 |
+
```bash
|
| 72 |
+
curl ifconfig.me
|
| 73 |
+
```
|
| 74 |
+
|
| 75 |
+
Let's assume your host's public IP is `YOUR_HOST_PUBLIC_IP` (e.g., `13.218.209.184`).
|
| 76 |
+
|
| 77 |
+
**B. Establish an SSH Tunnel (SOCKS5 Proxy) on your Local Machine:**
|
| 78 |
+
|
| 79 |
+
Open a terminal on your local machine (the one you want to route traffic from) and run the following command. Make sure you are in the directory where `tunneluser_key` is located.
|
| 80 |
+
|
| 81 |
+
```bash
|
| 82 |
+
ssh -i ssh-config/tunneluser_key -N -D 1080 tunneluser@YOUR_HOST_PUBLIC_IP -p 2222
|
| 83 |
+
```
|
| 84 |
+
|
| 85 |
+
- `-i ssh-config/tunneluser_key`: Specifies the private key for authentication.
|
| 86 |
+
- `-N`: Do not execute a remote command (just forward ports).
|
| 87 |
+
- `-D 1080`: Creates a dynamic SOCKS5 proxy on your local machine at port `1080`.
|
| 88 |
+
- `tunneluser@YOUR_HOST_PUBLIC_IP`: Connects to the SSH server on your Docker host as `tunneluser`.
|
| 89 |
+
- `-p 2222`: Specifies the SSH port on your Docker host.
|
| 90 |
+
|
| 91 |
+
Keep this terminal window open; the SSH tunnel will remain active as long as this command is running.
|
| 92 |
+
|
| 93 |
+
**C. Configure Your Applications/System to Use the SOCKS5 Proxy:**
|
| 94 |
+
|
| 95 |
+
Now, configure your applications (e.g., web browser, chat client) or your system's network settings to use a SOCKS5 proxy at `localhost:1080`.
|
| 96 |
+
|
| 97 |
+
- **Proxy Type:** SOCKS5
|
| 98 |
+
- **Proxy Host/Address:** `127.0.0.1` or `localhost`
|
| 99 |
+
- **Proxy Port:** `1080`
|
| 100 |
+
|
| 101 |
+
Once configured, all traffic from those applications will be routed through the SSH tunnel to your Docker container, and then out to the internet via the Docker host's NAT.
|
| 102 |
+
|
| 103 |
+
## Important Notes
|
| 104 |
+
|
| 105 |
+
- **Security:** Running Docker containers in `privileged` mode and with `NET_ADMIN`/`SYS_MODULE` capabilities grants significant power. Ensure your host system is secure. The `tunneluser_key` is your private key; **keep it secure and do not share it.**
|
| 106 |
+
- **IP Forwarding:** The `Dockerfile` and `entrypoint.sh` ensure IP forwarding is enabled and iptables rules are set up for NAT.
|
| 107 |
+
- **SOCKS5 vs. VPN:** This setup provides a SOCKS5 proxy, which is application-layer. It's not a full VPN tunnel that routes all system traffic by default. You need to configure applications to use the proxy. For system-wide routing, you might need additional tools (e.g., `proxychains` on Linux/macOS) or system-level proxy settings.
|
| 108 |
+
|
| 109 |
+
This setup provides a flexible and relatively easy-to-manage NAT gateway using SSH and SOCKS5.
|
| 110 |
+
|
docker-compose.yml
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version: '3.8'
|
| 2 |
+
|
| 3 |
+
services:
|
| 4 |
+
nat-gateway:
|
| 5 |
+
build: .
|
| 6 |
+
container_name: nat-gateway
|
| 7 |
+
privileged: true
|
| 8 |
+
cap_add:
|
| 9 |
+
- NET_ADMIN
|
| 10 |
+
- SYS_MODULE
|
| 11 |
+
ports:
|
| 12 |
+
- "2222:22" # SSH port
|
| 13 |
+
- "1080:1080" # SOCKS5 port
|
| 14 |
+
volumes:
|
| 15 |
+
- ./ssh-config:/app/ssh-config
|
| 16 |
+
- ./socks5-config:/app/socks5-config
|
| 17 |
+
restart: unless-stopped
|
| 18 |
+
networks:
|
| 19 |
+
- nat-network
|
| 20 |
+
|
| 21 |
+
networks:
|
| 22 |
+
nat-network:
|
| 23 |
+
driver: bridge
|
| 24 |
+
ipam:
|
| 25 |
+
config:
|
| 26 |
+
- subnet: 172.20.0.0/16
|
| 27 |
+
|
entrypoint.sh
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
set -e
|
| 4 |
+
|
| 5 |
+
echo "Starting SSH/SOCKS5 NAT Gateway setup..."
|
| 6 |
+
|
| 7 |
+
# Enable IP forwarding
|
| 8 |
+
echo 1 > /proc/sys/net/ipv4/ip_forward
|
| 9 |
+
|
| 10 |
+
# Fetch public IP
|
| 11 |
+
PUBLIC_IP=$(curl -s ifconfig.me)
|
| 12 |
+
if [ -z "$PUBLIC_IP" ]; then
|
| 13 |
+
echo "Error: Could not fetch public IP. Exiting."
|
| 14 |
+
exit 1
|
| 15 |
+
fi
|
| 16 |
+
echo "Detected public IP: $PUBLIC_IP"
|
| 17 |
+
|
| 18 |
+
# Configure SSH server
|
| 19 |
+
cp /app/ssh-config/sshd_config /etc/ssh/sshd_config
|
| 20 |
+
chmod 600 /etc/ssh/sshd_config
|
| 21 |
+
|
| 22 |
+
# Generate SSH host keys if they don't exist
|
| 23 |
+
if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then
|
| 24 |
+
ssh-keygen -A
|
| 25 |
+
fi
|
| 26 |
+
|
| 27 |
+
# Start SSH service in debug mode and redirect output to a file
|
| 28 |
+
/usr/sbin/sshd -D -e -f /etc/ssh/sshd_config > /var/log/sshd_debug.log 2>&1 &
|
| 29 |
+
|
| 30 |
+
echo "SSH server started."
|
| 31 |
+
|
| 32 |
+
# Configure Dante SOCKS5 server
|
| 33 |
+
cp /app/socks5-config/danted.conf /etc/danted.conf
|
| 34 |
+
chmod 644 /etc/danted.conf
|
| 35 |
+
|
| 36 |
+
# Start Dante SOCKS5 server
|
| 37 |
+
/usr/sbin/danted -D &
|
| 38 |
+
|
| 39 |
+
echo "Dante SOCKS5 server started."
|
| 40 |
+
|
| 41 |
+
# Apply iptables rules for NAT using iptables-legacy
|
| 42 |
+
iptables-legacy -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
| 43 |
+
iptables-legacy -A FORWARD -i eth0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
|
| 44 |
+
iptables-legacy -A FORWARD -i eth0 -o eth0 -j ACCEPT
|
| 45 |
+
|
| 46 |
+
echo "iptables NAT rules set."
|
| 47 |
+
|
| 48 |
+
# Keep the container running
|
| 49 |
+
exec tail -f /dev/null
|
| 50 |
+
|
| 51 |
+
|
socks5-config/danted.conf
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Dante SOCKS5 server configuration
|
| 2 |
+
|
| 3 |
+
# Log to syslog
|
| 4 |
+
logoutput: syslog
|
| 5 |
+
|
| 6 |
+
# Internal interface (where clients connect)
|
| 7 |
+
internal: 0.0.0.0 port = 1080
|
| 8 |
+
|
| 9 |
+
# External interface (where traffic exits)
|
| 10 |
+
external: eth0
|
| 11 |
+
|
| 12 |
+
# Authentication method
|
| 13 |
+
socksmethod: none
|
| 14 |
+
|
| 15 |
+
# Client rules
|
| 16 |
+
clientmethod: none
|
| 17 |
+
|
| 18 |
+
# User for running the daemon
|
| 19 |
+
user.privileged: root
|
| 20 |
+
user.unprivileged: nobody
|
| 21 |
+
|
| 22 |
+
# Client access rules
|
| 23 |
+
client pass {
|
| 24 |
+
from: 0.0.0.0/0 to: 0.0.0.0/0
|
| 25 |
+
log: error
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
# SOCKS rules
|
| 29 |
+
socks pass {
|
| 30 |
+
from: 0.0.0.0/0 to: 0.0.0.0/0
|
| 31 |
+
log: error
|
| 32 |
+
}
|
| 33 |
+
|
ssh-config/authorized_keys
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD6KDZVagru9IX8RpmmWm2hsp7sONnHQyBtQ8W46nvDmGEKSZIKUp1kAZGEkIYx2AoVjSCZepAfXzeHOr2PB/FHS0zBuDf8kAazzWOJNvcb4u/wVkAWUtKkEo68gQyewP107R8FcTednTUP10IrEGHw/esguWNcC+Exal/Nrl9XQd9xMPlnbteKu/vIIrWt1z3Tq4VEDFrbCT4o66Ek7BPPZ1Zsqiz2RVCdWaS74FzbL/tqafMVNooMfhCYkAON8ZQ4ocGdCh+/FZLluWXHNT53/b9bbN9aQnDEPYDhG+vEbOekD9yYGhSAFYLflSNXkHiMfDj6ahN3R5kuQrX6zMl4UzjKs3yqhH8P8RIP9JHEKnu+Q/gLpLcYMB+g8Kc/OUfZlNPCIcC0XpXWHg4j7MQZxVNFnKQTEIBY1LwN5WRuPq70klv3GQmZwILu1RhQxKOEd/cEt2TOb4KFJS+5nHU5QSezGIuH3mP7xq0PZFp3XdJDODWUPPbMTkZbwCYansP37ujKKffBy0NHdw3FBAelhlObcnf3Nsy6QMUmUuS8Y2uaERDhUXW4Hy7UK13sonpCgGse2XVs7GJVOVy1J5JgnVDSaXpg5z60AkthWLhK+UMCcrTCech5Ru80ujQIy7mYPzlfRme3UAd7YEOWbWMW9y7GXYsbH5eiEyXfRa8tQQ== ubuntu@822bfcfe3641
|
ssh-config/new_tunneluser_key
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-----BEGIN OPENSSH PRIVATE KEY-----
|
| 2 |
+
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
|
| 3 |
+
NhAAAAAwEAAQAAAgEA+ig2VWoK7vSF/EaZplptobKe7DjZx0MgbUPFuOp7w5hhCkmSClKd
|
| 4 |
+
ZAGRhJCGMdgKFY0gmXqQH183hzq9jwfxR0tMwbg3/JAGs81jiTb3G+Lv8FZAFlLSpBKOvI
|
| 5 |
+
EMnsD9dO0fBXE3nZ01D9dCKxBh8P3rILljXAvhMWpfza5fV0HfcTD5Z27Xirv7yCK1rdc9
|
| 6 |
+
06uFRAxa2wk+KOuhJOwTz2dWbKos9kVQnVmku+Bc2y/7amnzFTaKDH4QmJADjfGUOKHBnQ
|
| 7 |
+
ofvxWS5bllxzU+d/2/W2zfWkJwxD2A4RvrxGznpA/cmBoUgBWC35UjV5B4jHw4+moTd0eZ
|
| 8 |
+
LkK1+szJeFM4yrN8qoR/D/ESD/SRxCp7vkP4C6S3GDAfoPCnPzlH2ZTTwiHAtF6V1h4OI+
|
| 9 |
+
zEGcVTRZykExCAWNS8DeVkbj6u9JJb9xkJmcCC7tUYUMSjhHf3BLdkzm+ChSUvuZx1OUEn
|
| 10 |
+
sxiLh95j+8atD2Rad13SQzg1lDz2zE5GW8AmGp7D9+7oyin3wctDR3cNxQQHpYZTm3J39z
|
| 11 |
+
bMukDFJlLkvGNrmhEQ4VF1uB8u1Ctd7KJ6QoBrHtl1bOxiVTlctSeSYJ1Q0ml6YOc+tAJL
|
| 12 |
+
YVi4SvlDAnK0wnnIeUbvNLo0CMu5mD85X0Znt1AHe2BDlm1jFvcuxl2LGx+XohMl30WvLU
|
| 13 |
+
EAAAdIP4s3Sj+LN0oAAAAHc3NoLXJzYQAAAgEA+ig2VWoK7vSF/EaZplptobKe7DjZx0Mg
|
| 14 |
+
bUPFuOp7w5hhCkmSClKdZAGRhJCGMdgKFY0gmXqQH183hzq9jwfxR0tMwbg3/JAGs81jiT
|
| 15 |
+
b3G+Lv8FZAFlLSpBKOvIEMnsD9dO0fBXE3nZ01D9dCKxBh8P3rILljXAvhMWpfza5fV0Hf
|
| 16 |
+
cTD5Z27Xirv7yCK1rdc906uFRAxa2wk+KOuhJOwTz2dWbKos9kVQnVmku+Bc2y/7amnzFT
|
| 17 |
+
aKDH4QmJADjfGUOKHBnQofvxWS5bllxzU+d/2/W2zfWkJwxD2A4RvrxGznpA/cmBoUgBWC
|
| 18 |
+
35UjV5B4jHw4+moTd0eZLkK1+szJeFM4yrN8qoR/D/ESD/SRxCp7vkP4C6S3GDAfoPCnPz
|
| 19 |
+
lH2ZTTwiHAtF6V1h4OI+zEGcVTRZykExCAWNS8DeVkbj6u9JJb9xkJmcCC7tUYUMSjhHf3
|
| 20 |
+
BLdkzm+ChSUvuZx1OUEnsxiLh95j+8atD2Rad13SQzg1lDz2zE5GW8AmGp7D9+7oyin3wc
|
| 21 |
+
tDR3cNxQQHpYZTm3J39zbMukDFJlLkvGNrmhEQ4VF1uB8u1Ctd7KJ6QoBrHtl1bOxiVTlc
|
| 22 |
+
tSeSYJ1Q0ml6YOc+tAJLYVi4SvlDAnK0wnnIeUbvNLo0CMu5mD85X0Znt1AHe2BDlm1jFv
|
| 23 |
+
cuxl2LGx+XohMl30WvLUEAAAADAQABAAACAAN8OsY7Cr7JtdyDWvcsHzG89HAL77l8vYTV
|
| 24 |
+
iE7wp2ZHfHdL+fFTtYEpRhl/zlAp93lVj3IhTho9yvSC9JVQ/JiBcPw+9eVlLU66f8FE5z
|
| 25 |
+
GihQocbYVSGetdcyh8WiG+bxmUBytd0zL1N9d0veWDM4DLzNzrxaRd6avfqfOKkyX6/eMM
|
| 26 |
+
wLYjSh9S9Kmqas0VU2AcWD2P4taBPQuNaDVEkRcXPxHsV2GGqt5HsN70O971lBi8s/1kQT
|
| 27 |
+
f2LALaziM0uIZcdz8vSazGycE9HBun1IBlTudLb5uJPZsiVJDDq+fUm5qXz6Xn28gYD0wl
|
| 28 |
+
qV8k3Q/EraI23EwRuY2L3OS1ueCAp8DYe2m4Ds4aPwMhgByIXcqHtDxDl7AujLPpHnA74M
|
| 29 |
+
eChFrH79llWvixMQz3Q3SegaYh0eqh/QHmTWhhKlUlybWGzNdp8d9Oq4aYgqUXfIWk3xcK
|
| 30 |
+
NkBlqMVglXBvC/KPWC7HkJbTTTn5umVD9ZfnecbuYnHm1eNTWbBInupGttIBKvG4iLcJEX
|
| 31 |
+
a3gjhHHMxilMwwha7oK9kKu0tVEZNqzQK/IQ1EQf1YmT71tblMc/xSrhpfwYWzME2bXeqD
|
| 32 |
+
fYSmWuzit6t4FqhuiHk2mTSyC1IsbN6TML5AguNB91H0icPd+ZH8NfsCQfVIlkVfrB+qEN
|
| 33 |
+
PPI9R2IZnPQaUrF7g1AAABAGcbDEvy37hW9TRM8pW5GP+hbTmuNyc3TD5F4SQcXBnZM/wQ
|
| 34 |
+
2G6sn1uUNqlFvEleAB4xXfUSHkgttnRRXzs+meqcHxRBmb3LcYYTGiOv+Dg0+5hlKRV9kR
|
| 35 |
+
GgfXVw/rxUGZbBriq1sdOFtXsEZlZYajIcaEqI+uLxUj2ZHx5BsWhPNXqwv45rbtni5JZ5
|
| 36 |
+
mD37p2rnY9V1/NFgrXdHYjvRh3le/VRBOCR/5W5HChdTuItcQJy3Vbhc0AGSgDSb7b0s4I
|
| 37 |
+
4577ssb7KlaoQwfRqYgzF6MLlMcXnEaAOM2Zn7Lr+5Fts6Lwq9K2oJkcitDdfrlY43QNVz
|
| 38 |
+
ym/BusYQxAlhc5MAAAEBAPuANpROHNpFSHZBcDQ0Oa+EVxENXbXV3YKhMTBLoAvF1y9q7S
|
| 39 |
+
OG5BiOTWjKJdDNjw1XJx6zJgyYCp28dIxTCiPHhUnap+gQmlNylwBY5Zg0Flg2XwPtRkP3
|
| 40 |
+
zgSRqyM40OxfPvhwg6klb9DBXIBMpUu8/amZBITL1KHk3MzGZWk4sdmOPOrFLRCWsD01YF
|
| 41 |
+
CiLcTXp57031G2svExECCetn7ePfan47QjAMxG4QGff6sUwLtP2+GHWncQExfxRgfyiYsD
|
| 42 |
+
3ze7u2ETB7XDYy4/tsPy1pydmyzVS7dOciF7Z6bweN7ao4r3OBSfOuHioZmxKM5eDXIZIT
|
| 43 |
+
38URuJPZGW0A0AAAEBAP6h2FlVJCM+qgDYgkMu06+nsMwKWL/QilpBuXfg0Jj0mEN55c21
|
| 44 |
+
eswVNkfajZ3dqy6ZXfsWuAFqN77GNm1nwBQ3IoGe2gKnqrgt6uXOXcu/CqtzYkH/2p+dNZ
|
| 45 |
+
1K8hcX7gIxcLcHBjOANyltiOBO/3KYjp4u80/WEGVTpnFSC56zs83ruHP+t3ZVpKsD4xPG
|
| 46 |
+
begTvi+mHNGZXkXhrycPqKh06F15ic446ptJFMvcv/Ph3dMZVJ/gZKQAeKlMcKsfTGr+K0
|
| 47 |
+
Ba5ltm8SVgUlmMhP+MP9BIu2N6JRodQwviWzs/LzJcRJcSO0Ty8+q/01C9fpzv4NuoqpI4
|
| 48 |
+
tpIhjCpNUQUAAAATdWJ1bnR1QDgyMmJmY2ZlMzY0MQ==
|
| 49 |
+
-----END OPENSSH PRIVATE KEY-----
|
ssh-config/new_tunneluser_key.pub
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD6KDZVagru9IX8RpmmWm2hsp7sONnHQyBtQ8W46nvDmGEKSZIKUp1kAZGEkIYx2AoVjSCZepAfXzeHOr2PB/FHS0zBuDf8kAazzWOJNvcb4u/wVkAWUtKkEo68gQyewP107R8FcTednTUP10IrEGHw/esguWNcC+Exal/Nrl9XQd9xMPlnbteKu/vIIrWt1z3Tq4VEDFrbCT4o66Ek7BPPZ1Zsqiz2RVCdWaS74FzbL/tqafMVNooMfhCYkAON8ZQ4ocGdCh+/FZLluWXHNT53/b9bbN9aQnDEPYDhG+vEbOekD9yYGhSAFYLflSNXkHiMfDj6ahN3R5kuQrX6zMl4UzjKs3yqhH8P8RIP9JHEKnu+Q/gLpLcYMB+g8Kc/OUfZlNPCIcC0XpXWHg4j7MQZxVNFnKQTEIBY1LwN5WRuPq70klv3GQmZwILu1RhQxKOEd/cEt2TOb4KFJS+5nHU5QSezGIuH3mP7xq0PZFp3XdJDODWUPPbMTkZbwCYansP37ujKKffBy0NHdw3FBAelhlObcnf3Nsy6QMUmUuS8Y2uaERDhUXW4Hy7UK13sonpCgGse2XVs7GJVOVy1J5JgnVDSaXpg5z60AkthWLhK+UMCcrTCech5Ru80ujQIy7mYPzlfRme3UAd7YEOWbWMW9y7GXYsbH5eiEyXfRa8tQQ== ubuntu@822bfcfe3641
|
ssh-config/sshd_config
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Port 22
|
| 2 |
+
ListenAddress 0.0.0.0
|
| 3 |
+
|
| 4 |
+
# Authentication
|
| 5 |
+
PermitRootLogin no
|
| 6 |
+
PasswordAuthentication no
|
| 7 |
+
ChallengeResponseAuthentication no
|
| 8 |
+
UsePAM yes
|
| 9 |
+
X11Forwarding yes
|
| 10 |
+
PrintMotd no
|
| 11 |
+
AcceptEnv LANG LC_*
|
| 12 |
+
Subsystem sftp /usr/lib/openssh/sftp-server
|
| 13 |
+
|
| 14 |
+
# Allow only specific user for tunneling
|
| 15 |
+
AllowUsers tunneluser
|
| 16 |
+
|
| 17 |
+
# Configure for SOCKS5 proxy
|
| 18 |
+
GatewayPorts yes
|
| 19 |
+
AllowTcpForwarding yes
|
| 20 |
+
PermitTunnel no
|
| 21 |
+
|
| 22 |
+
# Path to authorized_keys for tunneluser
|
| 23 |
+
AuthorizedKeysFile /app/ssh-config/authorized_keys
|
| 24 |
+
|
ssh-config/tunneluser_key
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-----BEGIN OPENSSH PRIVATE KEY-----
|
| 2 |
+
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
|
| 49 |
+
-----END OPENSSH PRIVATE KEY-----
|
ssh-config/tunneluser_key.pub
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDX/5yAEAgulBRsOsQvt1wTbrkWjvQJcZDxNUHgD0gvU4Lu6X3dJYwdTRVoT9tTPkpA9JFR3BFPTiRQ7XPJ5x0NAbB3d6ts+Pf9rlBxrGiaqOkdgeNJbMETzER1j6Mu8WVs4sdZEQHHA3URCn7rMtyaMmPUdnNi3CwsBah+wFpqPvv7kdq32ZovwbKM3tPPvBOk9FVdlWcENS1b0SsX+SFbkFzBopo5nMqet8iF+tolSITv+VXUXfG6FtT8cSC+MTUm3pyRkUCOslYV5YWjax30kS78lNbXP8M/FSKbuL5MtctowDVgx+u4n0oSUBP+TZw8wA9kUfgBTwRuMmgrPKQPduvn7CMLyaCvgnaI2WC/39DhDk9kVKee35bP51/OHLRb/Sq2A4qyWCFvO9d0cz21rm7MBW26Ks9b76YTbhO5Qc9fTWdyTpq+/64YHHhTlTPHhCPcTwg9nexk4x7AtlnLz8GMRWPFvRi+XD5v/eoBXmGXVeWuVDpdgAsDiu/miGsDAKvt/DpiLa8oqIsRu8JQFIqrIQ8fFg59lVH3+aC2wLsIYK4VJ05q1CUmFV0x6lZTSjgYa5E9ZJJ6CnRPqYZegXq2R2N5a4bRBtrlwF1DWce/mzYAmrVlD+GqXwdr1PxCpgO3LMwLMDBxBd2AilksD4HDEr/S1xGgq4to1Rm4Jw== ubuntu@f0730ff40bea
|
test_report.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# SSH/SOCKS5 NAT Gateway Application Test Report
|
| 2 |
+
|
| 3 |
+
## Overview
|
| 4 |
+
|
| 5 |
+
This report details the process of setting up, debugging, and testing the provided SSH/SOCKS5 NAT Gateway application. The application, packaged as a Docker Compose project, aims to establish an SSH tunnel and a SOCKS5 proxy to route traffic through the Docker host's internet connection with NAT.
|
| 6 |
+
|
| 7 |
+
## Setup and Initial Issues
|
| 8 |
+
|
| 9 |
+
1. **Unzipping and Initial Review:** The provided `ssh-socks-nat-gateway-setup.zip` file was unzipped, and the `README.md` was reviewed for setup instructions.
|
| 10 |
+
|
| 11 |
+
2. **Docker Compose Installation:** Initially, `docker-compose` was not found on the system. It was installed using `sudo apt-get install -y docker-compose`.
|
| 12 |
+
|
| 13 |
+
3. **Docker Service Issues:** After installing `docker-compose`, attempts to build and run the Docker container failed with `Error while fetching server API version: Not supported URL scheme http+docker`. This was resolved by starting the Docker service using `sudo systemctl start docker`.
|
| 14 |
+
|
| 15 |
+
4. **Persistent SSH Connection Issues (`kex_exchange_identification`):** The primary challenge encountered was the inability to establish an SSH connection to the `nat-gateway` container, consistently resulting in `kex_exchange_identification: Connection closed by remote host` errors. Initial debugging steps included:
|
| 16 |
+
* Checking permissions of `tunneluser_key`.
|
| 17 |
+
* Inspecting `sshd_config` inside the container.
|
| 18 |
+
* Restarting the container and SSH service.
|
| 19 |
+
* Enabling verbose SSH logging (which did not yield useful output).
|
| 20 |
+
|
| 21 |
+
## Debugging and Resolution of SSH Issues
|
| 22 |
+
|
| 23 |
+
Through iterative debugging, the following key issues were identified and resolved:
|
| 24 |
+
|
| 25 |
+
1. **`authorized_keys` Path Mismatch:** The `entrypoint.sh` script was copying `sshd_config` from `/app/ssh-config` to `/etc/ssh/sshd_config` inside the container. However, the `sshd_config` file itself was configured to look for `authorized_keys` in `/home/tunneluser/.ssh/authorized_keys`. This mismatch prevented proper authentication. This was initially addressed by modifying the `sshd_config` inside the running container, but the changes were overwritten by `entrypoint.sh` upon container restart.
|
| 26 |
+
|
| 27 |
+
2. **Dynamic `sshd_config` Overwrite:** It was discovered that the `entrypoint.sh` script was overwriting the `sshd_config` file with a version that did not include the necessary `AuthorizedKeysFile /app/ssh-config/authorized_keys` directive. This meant that any manual changes to the `sshd_config` within the container were lost.
|
| 28 |
+
|
| 29 |
+
3. **Missing `tunneluser`:** A critical issue was the absence of the `tunneluser` inside the Docker container. The SSH server requires this user to exist for authentication. This was confirmed by `sudo docker exec nat-gateway id tunneluser` returning `no such user`.
|
| 30 |
+
|
| 31 |
+
**Resolution Steps:**
|
| 32 |
+
|
| 33 |
+
* **Dockerfile Modification:** The `Dockerfile` was modified to include `RUN useradd -m -s /bin/bash tunneluser` to ensure the `tunneluser` is created during the image build process.
|
| 34 |
+
* **`sshd_config` in Source:** The `sshd_config` file in the source directory (`./ssh-config/sshd_config`) was permanently updated to include `AuthorizedKeysFile /app/ssh-config/authorized_keys`.
|
| 35 |
+
* **Key Regeneration and Update:** A new SSH key pair (`new_tunneluser_key`) was generated, and the public key was copied to `/home/ubuntu/ssh-socks-nat-gateway-setup/project-root/ssh-config/authorized_keys` to ensure it was correctly mounted into the container.
|
| 36 |
+
* **Rebuilding and Restarting:** The Docker container was rebuilt and restarted using `sudo docker-compose up --build -d` to apply all changes.
|
| 37 |
+
|
| 38 |
+
After these modifications, an SSH connection to the container's internal IP (`172.20.0.2`) was successfully established using the new key.
|
| 39 |
+
|
| 40 |
+
## SOCKS5 Proxy Functionality Test
|
| 41 |
+
|
| 42 |
+
With the SSH tunnel successfully established, the SOCKS5 proxy functionality was tested.
|
| 43 |
+
|
| 44 |
+
**Test Command:**
|
| 45 |
+
|
| 46 |
+
```bash
|
| 47 |
+
ssh -i /home/ubuntu/ssh-socks-nat-gateway-setup/project-root/ssh-config/new_tunneluser_key -N -D 1080 tunneluser@35.224.208.195 -p 2222
|
| 48 |
+
curl --socks5 localhost:1080 ifconfig.me
|
| 49 |
+
```
|
| 50 |
+
|
| 51 |
+
**Result:**
|
| 52 |
+
|
| 53 |
+
The `curl` command, when routed through the SOCKS5 proxy, successfully returned the public IP address of the sandbox environment (`35.224.208.195`). This confirms that the SOCKS5 proxy is functioning correctly and routing traffic as expected.
|
| 54 |
+
|
| 55 |
+
## Conclusion
|
| 56 |
+
|
| 57 |
+
The SSH/SOCKS5 NAT Gateway application has been successfully set up, debugged, and tested. The primary challenges were related to SSH configuration within the Docker environment, specifically the `authorized_keys` path and the existence of the `tunneluser`. Once these issues were addressed, the SSH tunnel and SOCKS5 proxy functioned as intended, demonstrating the application's ability to route traffic through the Docker host.
|
| 58 |
+
|
| 59 |
+
|