|
|
|
|
|
""" |
|
|
OpenVPN Configuration Manager for Hugging Face Spaces |
|
|
Full-featured version with Gradio interface |
|
|
""" |
|
|
|
|
|
import gradio as gr |
|
|
from datetime import datetime |
|
|
|
|
|
def create_openvpn_config(client_name, server_host, server_port, protocol): |
|
|
"""Generate OpenVPN client configuration""" |
|
|
config = f"""# OpenVPN Client Configuration |
|
|
# Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} |
|
|
# Client: {client_name} |
|
|
|
|
|
client |
|
|
dev tun |
|
|
proto {protocol} |
|
|
remote {server_host} {server_port} |
|
|
resolv-retry infinite |
|
|
nobind |
|
|
persist-key |
|
|
persist-tun |
|
|
remote-cert-tls server |
|
|
cipher AES-256-GCM |
|
|
auth SHA256 |
|
|
verb 3 |
|
|
|
|
|
# Security recommendations: |
|
|
# - Use strong ciphers (AES-256-GCM) |
|
|
# - Enable certificate verification |
|
|
# - Keep certificates secure |
|
|
# - Update regularly |
|
|
""" |
|
|
return config |
|
|
|
|
|
def generate_ca_script(): |
|
|
"""Generate CA certificate setup script""" |
|
|
return """#!/bin/bash |
|
|
# Certificate Authority Setup Script for OpenVPN |
|
|
# Run this script on your OpenVPN server |
|
|
|
|
|
# Generate CA private key |
|
|
openssl genrsa -out ca.key 4096 |
|
|
|
|
|
# Generate CA certificate |
|
|
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \\ |
|
|
-subj "/C=US/ST=State/L=City/O=Organization/CN=CA" |
|
|
|
|
|
# Generate server certificate |
|
|
openssl genrsa -out server.key 4096 |
|
|
openssl req -new -key server.key -out server.csr \\ |
|
|
-subj "/C=US/ST=State/L=City/O=Organization/CN=server" |
|
|
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt |
|
|
|
|
|
# Generate client certificate |
|
|
openssl genrsa -out client.key 4096 |
|
|
openssl req -new -key client.key -out client.csr \\ |
|
|
-subj "/C=US/ST=State/L=City/O=Organization/CN=client" |
|
|
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt |
|
|
|
|
|
echo "Certificates generated successfully!" |
|
|
""" |
|
|
|
|
|
def generate_server_config(): |
|
|
"""Generate server configuration""" |
|
|
return """# OpenVPN Server Configuration |
|
|
|
|
|
# Network settings |
|
|
port 1194 |
|
|
proto udp |
|
|
dev tun |
|
|
|
|
|
# Certificates |
|
|
ca ca.crt |
|
|
cert server.crt |
|
|
key server.key |
|
|
dh dh.pem |
|
|
|
|
|
# Network configuration |
|
|
server 10.8.0.0 255.255.255.0 |
|
|
ifconfig-pool-persist ipp.txt |
|
|
|
|
|
# Keepalive |
|
|
keepalive 10 120 |
|
|
|
|
|
# Compression |
|
|
comp-lzo |
|
|
|
|
|
# User permissions |
|
|
user nobody |
|
|
group nogroup |
|
|
|
|
|
# Security |
|
|
cipher AES-256-GCM |
|
|
auth SHA256 |
|
|
tls-auth ta.key 0 |
|
|
|
|
|
# Logging |
|
|
log-append /var/log/openvpn.log |
|
|
verb 3 |
|
|
""" |
|
|
|
|
|
def main(): |
|
|
"""Main Gradio interface""" |
|
|
|
|
|
with gr.Blocks(title="OpenVPN Configuration Manager", theme=gr.themes.Soft()) as demo: |
|
|
gr.Markdown("# π OpenVPN Configuration Manager") |
|
|
gr.Markdown("Generate OpenVPN configurations, certificates, and deployment guides") |
|
|
|
|
|
with gr.Tab("Client Configuration"): |
|
|
with gr.Row(): |
|
|
with gr.Column(): |
|
|
client_name = gr.Textbox(value="client1", label="Client Name") |
|
|
server_host = gr.Textbox(value="vpn.example.com", label="Server Host") |
|
|
server_port = gr.Number(value=1194, label="Port", minimum=1, maximum=65535) |
|
|
protocol = gr.Radio(["udp", "tcp"], value="udp", label="Protocol") |
|
|
|
|
|
config_output = gr.Textbox(label="Client Configuration", lines=20, interactive=False) |
|
|
|
|
|
gr.Button("Generate Client Config", variant="primary").click( |
|
|
create_openvpn_config, |
|
|
inputs=[client_name, server_host, server_port, protocol], |
|
|
outputs=[config_output] |
|
|
) |
|
|
|
|
|
with gr.Tab("Server Configuration"): |
|
|
server_config = gr.Textbox( |
|
|
label="Server Configuration", |
|
|
lines=25, |
|
|
value=generate_server_config(), |
|
|
interactive=False |
|
|
) |
|
|
gr.Markdown("**Save this as `/etc/openvpn/server.conf` on your server**") |
|
|
|
|
|
with gr.Tab("Certificate Scripts"): |
|
|
ca_script_btn = gr.Button("Generate CA Script") |
|
|
ca_script_output = gr.Textbox( |
|
|
label="CA Setup Script", |
|
|
lines=20, |
|
|
value=generate_ca_script(), |
|
|
interactive=False |
|
|
) |
|
|
|
|
|
with gr.Tab("Deployment Guide"): |
|
|
gr.Markdown(""" |
|
|
## π Deployment Instructions |
|
|
|
|
|
### Server Setup: |
|
|
1. **Install OpenVPN:** |
|
|
```bash |
|
|
sudo apt update |
|
|
sudo apt install openvpn easy-rsa |
|
|
``` |
|
|
|
|
|
2. **Generate Certificates:** |
|
|
- Run the CA script from the "Certificate Scripts" tab |
|
|
- This creates all necessary certificates |
|
|
|
|
|
3. **Configure Firewall:** |
|
|
```bash |
|
|
sudo ufw allow 1194/udp |
|
|
sudo ufw allow ssh |
|
|
``` |
|
|
|
|
|
4. **Start OpenVPN:** |
|
|
```bash |
|
|
sudo systemctl start openvpn@server |
|
|
sudo systemctl enable openvpn@server |
|
|
``` |
|
|
|
|
|
### Client Setup: |
|
|
1. **Download Configuration:** |
|
|
- Use the "Client Configuration" tab to generate your config |
|
|
- Save as `client.ovpn` |
|
|
|
|
|
2. **Import to Client:** |
|
|
- OpenVPN GUI (Windows) |
|
|
- Tunnelblick (macOS) |
|
|
- NetworkManager (Linux) |
|
|
|
|
|
### Security Best Practices: |
|
|
- β
Use strong ciphers (AES-256-GCM) |
|
|
- β
Enable certificate verification |
|
|
- β
Keep private keys secure |
|
|
- β
Regular certificate rotation |
|
|
- β
Monitor logs for suspicious activity |
|
|
- β
Use fail2ban for protection |
|
|
""") |
|
|
|
|
|
with gr.Tab("Troubleshooting"): |
|
|
gr.Markdown(""" |
|
|
## π§ Common Issues & Solutions |
|
|
|
|
|
### Connection Problems: |
|
|
- **No internet access:** Check routing and IP forwarding |
|
|
- **Cannot connect to server:** Verify firewall and port settings |
|
|
- **Slow performance:** Try different protocols (UDP vs TCP) |
|
|
|
|
|
### Certificate Issues: |
|
|
- **Certificate verification failed:** Check CA certificate matches |
|
|
- **Key errors:** Ensure all certificate files are present |
|
|
- **Expired certificates:** Regenerate using CA script |
|
|
|
|
|
### Performance: |
|
|
- **Use UDP for better performance** |
|
|
- **Enable compression for slower connections** |
|
|
- **Monitor bandwidth usage** |
|
|
""") |
|
|
|
|
|
return demo |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo = main() |
|
|
demo.launch( |
|
|
server_name="0.0.0.0", |
|
|
server_port=7860, |
|
|
show_error=True, |
|
|
quiet=False |
|
|
) |