다음과 같은 질문이 있습니다.
내 서버에는 공개 고정 IP가 있습니다. 여태까지는 그런대로 잘됐다. 내 계획은 Wireguard를 사용하여 방화벽을 우회하고 여전히 공용 IP를 통해 서버와 해당 서비스에 액세스할 수 있도록 하는 것입니다. 방화벽 제한이 없기 때문에 다른 서버를 Wirguard 서버로 사용하고 있습니다. A(공용 IP가 있는 서버)의 wireguard 터널에 처음 연결하면 SSH 세션이 작동을 멈춥니다. A의 공인 IP를 통해 A의 SSH 서비스에 연결할 수 없습니다. 서버 B와 내부 Wireguard IP를 통해서만 연결할 수 있습니다. A의 공용 IP를 통해 서버 A의 모든 서비스에 액세스할 수 있도록 하는 방법은 무엇입니까? 특히 도커?
나의 첫 생각은 이랬다.
PostUp = ip rule add from PUBLIC table main
PreDown = ip rule del from PUBLIC table main
하지만 그러면 docker 서비스에 액세스할 수 없습니다.
sudo iptables -I FORWARD 4 -j LOG --log-prefix "RULE4:" --log-level 7
Docker 서비스에 연결을 시도한 후 나타나는 화면입니다.
RULE4:IN=ens192 OUT=br-ef854b642e53 MAC= SRC=My_home_public_ip DST=172.22.0.6(docker container) LEN=64 TOS=0x00 PREC=0x00 TTL=56 ID=0 DF PROTO=TCP SPT=2300 DPT=443 WINDOW=65535 RES=0x00 SYN URGP=0
RULE4:IN=br-ef854b642e53 OUT=wireguard-peer PHYSIN=vethf2383bb MAC= SRC=172.22.0.6 DST=My_home_public_ip LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=443 DPT=2300 WINDOW=65160 RES=0x00 ACK SYN URGP=0
나에게는 다음과 같습니다.
나->A->답변->Wireguard->아무것도 없음
하지만 좀 더 비슷해야 해
나->A->답변->나
기타 모든 트래픽의 경우:
A -> 라인배커
답변1
이것이 정확히 내가 원하는 것은 아니지만 이것이 임시 해결책입니다.
https://github.com/BrodyBuster/docker-wireguard-vpn
이 스크립트를 사용하면 --network 컨테이너:컨테이너_이름을 사용하지 않고 올바른 포트 전달을 사용하지 않고도 일부 컨테이너를 VPN 터널에 연결할 수 있었습니다. 이제 컨테이너가 터널에 액세스해야 하는 경우 VPN 네트워크를 컨테이너에 추가하기만 하면 됩니다.
추가 참고사항:
첫째, 호스트 wireguard와 docker wireguard를 동시에 시작할 수 없습니다. 스크립트를 수정하면 보관할 수도 있다고 생각합니다. 그러나 때로는 호스트 시스템에 터널이 필요한 경우도 있습니다. 이 시간 동안 몇 분 동안 Docker 터널을 끄고 호스트 터널을 활성화할 수 있습니다.
둘째, 이 구성은 재부팅 후에도 유지되지 않습니다. 호스트가 다시 시작된 후 컨테이너가 시작되고, 터널이 활성화된 것처럼 보이더라도 컨테이너에 액세스할 수 없습니다. 재부팅 후 스크립트를 해제하고 다시 실행해야 합니다. 이것은 약간 짜증나는 일입니다.