우분투 22.04를 실행하는 컴퓨터가 2대 있는데, 이를 서버와 프록시라고 부르겠습니다. 프록시는 고정 공용 IP를 가진 vps이고 서버는 nat 뒤에서 실행됩니다. 프록시의 일부 포트에서 모든 트래픽을 서버로 라우팅하고 싶습니다.
나는 2 사이에 wireguard VPN을 설정했으며 둘 다 서로 핑할 수 있습니다. 프록시에서 서버의 VPN 주소를 컬링하면 올바른 HTML 응답을 얻고 프록시에서 nginx를 설정합니다(의도된 최종 의도는 아님). http/https가 아닌 다른 서비스를 라우팅하고 싶기 때문에) VPN IP에 Proxy_pass를 허용하고 일단 올바른 HTML 응답을 얻을 수 있습니다.
하지만 iptables/ufw를 사용하여 전달을 설정할 수 없었습니다. 이것은 인터페이스 작동 시 iptables 라우팅 규칙을 포함하는 내 wireguard 구성입니다.
대리:
[Interface]
# Proxy with static ip
Address = 10.250.0.1/32
ListenPort = 23456
PrivateKey = {private key}
# packet forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1
# port forwarding
PreUp = iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.250.0.2
PostDown = iptables -t nat -D PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.250.0.2
PreUp = iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.250.0.2
PostDown = iptables -t nat -D PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.250.0.2
[Peer]
# main_server behind nat
PublicKey = {pub key}
AllowedIPs = 10.250.0.2/32
섬기는 사람:
[Interface]
Address = 10.250.0.2/32
ListenPort = 23456
PrivateKey = {priv key}
[Peer]
PublicKey = {pub key}
Endpoint = {proxy server ip}:23456
AllowedIPs = 10.250.0.0/16
PersistentKeepalive = 25
실행하면 sudo iptables-save -c
다음이 반환됩니다.
# Completed on Wed Aug 24 17:01:57 2022
# Generated by iptables-save v1.8.7 on Wed Aug 24 17:01:57 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
[0:0] -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.250.0.2
[4:208] -A PREROUTING -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.250.0.2
COMMIT
[4:208]
웹 브라우저를 통해 프록시에 액세스하려고 할 때마다 패킷 및 바이트 수가 증가합니다.
답변1
저는 Wireguard를 통해 NAT 뒤의 서비스로 유사한 포트 전달이 작동하도록 하는 데 어려움을 겪고 있습니다. 내 구성은 귀하의 구성과 유사하지만 이를 작동시키려면 두 가지 변경 사항이 필요합니다.
첫째, DNAT 규칙 외에도 SNAT 규칙이 필요하다는 것을 알았습니다. 다음과 같이 시도해 볼 수도 있습니다.
iptables -t nat -A POSTROUTING -d 10.250.0.2 -o wg0 -p tcp --dport 80 -j SNAT --to-source 10.250.0.1
둘째, 여기서는 PreUp/PostDown보다는 PostUp/PreDown을 사용해야 한다고 생각합니다. iptables를 실행할 때 인터페이스가 아직 작동하지 않으면 라우팅 규칙이 유지되지 않는 것 같으므로 PostUp은 인터페이스가 먼저 제 위치에 있는지 확인합니다.
종합적으로 멀티포트를 사용하여 약간 단순화하면 프록시에서 다음 구성을 시도해 볼 수 있습니다.
[Interface]
# Proxy with static ip
Address = 10.250.0.1/32
ListenPort = 23456
PrivateKey = {private key}
# packet forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1
# port forwarding
PostUp = iptables -t nat -A PREROUTING -p tcp -m multiport --dports 80,443 -j DNAT --to- destination 10.250.0.2
PreDown = iptables -t nat -D PREROUTING -p tcp -m multiport --dports 80,443 -j DNAT --to- destination 10.250.0.2
PostUp = iptables -t nat -A POSTROUTING -d 10.250.0.2 -o wg0 -p tcp -m multiport --dports 80,443 -j SNAT --to-source 10.250.0.1
PreDown = iptables -t nat -D POSTROUTING -d 10.250.0.2 -o wg0 -p tcp -m multiport --dports 80,443 -j SNAT --to-source 10.250.0.1
[Peer]
# main_server behind nat
PublicKey = {pub key}
AllowedIPs = 10.250.0.2/32
인쇄상 오류가 발생하지 않았으면 좋겠습니다. 주의 깊게 확인하는 것이 가장 좋습니다.