https://github.com/krestomatio/pppxy
PPP (PROXY Protocol Proxy) is a lightweight proxy application designed to transparently add the PROXY protocol header to TCP connections
https://github.com/krestomatio/pppxy
proxy proxy-protocol
Last synced: 6 months ago
JSON representation
PPP (PROXY Protocol Proxy) is a lightweight proxy application designed to transparently add the PROXY protocol header to TCP connections
- Host: GitHub
- URL: https://github.com/krestomatio/pppxy
- Owner: krestomatio
- License: apache-2.0
- Created: 2024-08-13T14:31:42.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-14T14:26:59.000Z (over 1 year ago)
- Last Synced: 2025-04-10T02:44:51.840Z (12 months ago)
- Topics: proxy, proxy-protocol
- Language: Go
- Homepage:
- Size: 10.7 KB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PPPxy
**PPPxy (PROXY Protocol Proxy)** is a lightweight proxy application designed to transparently add the [PROXY protocol](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt) header to TCP connections. The app supports handling multiple proxy servers, each with its own configuration.
## Features
- Supports Proxy Protocol versions 1 and 2.
- Configurable via a YAML file.
## Installation
### Binary
To install PPPxy, clone the repository and build the binary:
```bash
git clone
cd pppxy
go build -o pppxy cmd/pppxy/main.go
```
### Container
To run as a container:
```bash
# create config.yaml
# CAP_NET_BIND_SERVICE is for binding to privileged ports
# or docker
podman run --rm -d \
--cap-add=CAP_NET_BIND_SERVICE \
--net=host \
--user 1001 \
--volume "${PWD}/config.yaml:/etc/pppxy/config.yaml:ro" \
--name pppxy quay.io/krestomatio/pppxy
```
### Systemd
To install and run as a systemd service:
```bash
mkdir -p /etc/pppxy
# modify the configuration file as needed
cat << EOF > /etc/pppxy/config.yaml
pppxy_group:
- listen_addr: ":11443"
backend_addr: "192.168.1.2:22443"
proxy_protocol_version: 1
- listen_addr: ":33443"
backend_addr: "192.168.1.3:44443"
proxy_protocol_version: 2
EOF
chown 1001:1001 /etc/pppxy/config.yaml
chcon -t container_file_t /etc/pppxy/config.yaml
podman create --rm --restart on-failure \
--stop-timeout 30 \
--cap-add=CAP_NET_BIND_SERVICE \
--net=host \
--user 1001 \
--volume /etc/pppxy/config.yaml:/etc/pppxy/config.yaml:ro \
--name pppxy quay.io/krestomatio/pppxy:0.0.1
podman generate systemd --new \
--restart-sec 15 \
--start-timeout 180 \
--stop-timeout 30 \
--name pppxy > /etc/systemd/system/pppxy.service
systemctl daemon-reload
systemctl enable --now pppxy.service
```
## Usage
Run the `pppxy` application with the desired configuration file:
```bash
./pppxy --help
Usage of ./pppxy:
-config string
Path to configuration file (default "/etc/pppxy/config.yaml")
-log-level string
Log level (debug, info, warn, error) (default "info")
```
## Configuration
The application is configured via a YAML file. Below is an example configuration:
```yaml
pppxy_group:
- listen_addr: ":11443"
backend_addr: "192.168.1.2:22443"
proxy_protocol_version: 1
- listen_addr: ":33443"
backend_addr: "192.168.1.3:44443"
proxy_protocol_version: 2
```
### Configuration Options
- **`listen_addr`**: The address and port where the proxy listens for incoming connections.
- **`backend_addr`**: The backend server address and port where the connection will be forwarded.
- **`proxy_protocol_version`**: The Proxy Protocol version to use (1 or 2).
## Log Levels
- **debug**: Detailed logs for debugging.
- **info**: General operational logs.
- **warn**: Logs that indicate potential issues.
- **error**: Logs that indicate failures.
## Krestomatio
This project is part of open source contribution at Krestomatio, a service offering [managed Moodle™ e-learning platforms](https://krestomatio.com).