상황: 미국 전역의 여러 VPS 서버가 Wireguard Mesh 네트워크를 통해 내 노트북에 연결되었습니다. Wireguard 메시 네트워크의 경우 innernet이라는 도구를 사용합니다(https://github.com/tonarino/innernet).
따라서 기본적으로 내 노트북과 VPN 서버가 동일한 내부 네트워크에 있습니다.
VPS ip = 10.32.89.1
laptop ip = 10.32.90.1
VPS와 노트북에는 이 가상 인터페이스가 정의되어 있는 것 같습니다(이것이 중요한지 확실하지 않음).
innernet
VPS 서버에는 mysql 컨테이너 runig가 있습니다(3306 포트를 호스트에 노출하지 않습니다). mysql 포트를 호스트에 마운트하지 않고 랩톱에서 dockerized mysql 서버에 어떻게 연결할 수 있습니까?
추리:
내가 왜 이런 걸 원하는 걸까?
왜냐하면 나는 그것(mysql 서버)을 전체 인터넷과 공격자에게 공개하고 싶지 않지만, 동시에 내 노트북에서 mysql 데이터에 쉽게 접근하고 싶기 때문입니다.
가능한 해결책:
그게 docker macvlan의 목적인가요? 내부넷 인터페이스가 상위 등으로 있는 VPS에서 네트워크를 만들어야 합니까? 그런 다음 내 mysql 컨테이너를 해당 네트워크에 연결합니까?
나는 이것을 시도했습니다 :
docker network create \
-d macvlan \
--attachable \
--subnet=172.40.110.0/24 \
--gateway=172.40.110.1 \
-o parent=innernet \
infranet2
그런 다음 mysql 컨테이너를 여기에 결합해 보았습니다.
docker network connect infranet2 mysql-server
하지만 오류만 발생합니다:
root@vps:~$ sudo docker network connect infranet2mysql-server 데몬의 오류 응답: macvlan 포트를 생성하지 못했습니다: 잘못된 인수
답변1
당신이 할 수 있는 일은 터널 IP와 같은 wireguard를 통해 액세스할 수 있는 내부 IP에서만 포트(3306)를 노출하는 것입니다(기본적으로 발생하는 모든 IP(0.0.0.0/0)에 노출하는 것과 반대). ). 터널 IP가 192.168.0.1인 경우 다음과 같이 수행합니다.
docker run --name mysql-server \
-p 192.168.0.1:3306:3306 \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-d mysql
그러면 원격 mysql 서버에 액세스할 수 있지만 인터넷에서의 액세스는 불가능합니다.