나는 뿌리 없는 Podman 컨테이너로 실행되는 웹 서버로 서버를 실행합니다. 루트 없는 컨테이너로서 포트 80과 443은 노출이 허용되지 않기 때문에 포트 10080과 10443이 노출됩니다.
외부에서 내 웹사이트에 액세스할 수 있도록 ufw를 방화벽으로 사용하고 거기에 포트 전달을 설정합니다. 이를 위해 파일 시작 부분에 다음 줄을 추가했습니다 /etc/ufw/before.rules
.
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 10080
-A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 10443
COMMIT
여태까지는 그런대로 잘됐다.
이제 Wireguard 서버를 실행하는 다른 컨테이너를 실행하고 싶습니다. 그러면 로그에 다음 내용이 출력되고 방화벽에서 규칙으로 설정된 것으로 보입니다.
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.13.13.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 10.13.13.2/32 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
ufw 방화벽을 활성화하지 않고, 특히 포트 전달을 정의하지 않고 Wireguard 컨테이너를 실행하면 모든 것이 잘 작동합니다. 클라이언트에 연결할 수 있으며 해당 트래픽은 터널을 통해 라우팅되어 인터넷에 도달합니다.
반면에 ufw 방화벽(정의된 포트 전달 포함)을 활성화한 다음 클라이언트를 사용하여 Wireguard VPN에 연결하면 모든 페이지 보기가 내 서버 자체에 도달하는 것처럼 보입니다. 적어도 다음과 같은 오류 메시지가 나타납니다.
This server could not prove that it is www.google.de. Its security certificate comes from <myServer>.de
ufw 방화벽을 구성하는 방법
- 외부에서 포트 80 또는 443으로 요청하면 포트 10080 또는 10443으로 전달되어 내 웹 서버에 도달합니다.
- 내 VPN 클라이언트의 요청이 내 서버 대신 WireGuard 터널을 통해 인터넷으로 전달되나요?
(다른 서버에서는 Docker 아래에서 WebServer와 WireGuard를 실행하고 있습니다. Docker WebServer가 포트 80과 443을 직접 노출하므로 모든 것이 잘 작동하므로 포트 전달이 필요하지 않습니다.)
도움을 주셔서 감사합니다.
답변1
다시 생각한 끝에 해결책은 간단했습니다. 대상이 내 서버 IP인 경우에만 포트 전달을 수행했기 때문에 before.rules를 다음과 같이 변경했습니다.
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -d <ServerIP> -p tcp --dport 80 -j REDIRECT --to-port 10080
-A PREROUTING -d <ServerIP> -p tcp --dport 443 -j REDIRECT --to-port 10443
COMMIT