본문 바로가기
Network

virtualbox 웹서버 스마트폰으로 접속해보기 + ssh + docker

by leopard4 2023. 11. 3.

외부 -> 공유기 -> PC(호스트) -> virtualbox(게스트) 이런식으로 갈거다. 

공유기 포트포워딩

포트설정을 3번해야되는줄 알았다.

 

공유기에서 한번하고 

윈도우에서 한번하고 

버츄얼박스에서 한번하고

 

그런데 윈도우는 생략했는데 잘된다.

 

 

 

생략한 윈도우 포트포워딩 방법

현재 리스닝하는 포트를 보여줍니다 

netsh interface portproxy show v4tov4

0.0.0.0은 하이패스같은 개념인듯? 아무튼 로컬IP를 대신함

추가예시

netsh interface portproxy add v4tov4 listenport=9999 listenaddress=0.0.0.0 connectport=8888 connectaddress=10.100.0.105

 

삭제예시

netsh interface portproxy delete v4tov4 listenport=9999 listenaddress=0.0.0.0

 

그런데 이 명령어들은 여기서 쓸일이 없음.

아마도 버츄얼박스 자체에 윈도우와 머신을 포워딩해주는 기능이 내장되어있는듯

 

 

버츄얼박스 NAT 네트워크 구성

호스트 IP는 윈도우컴퓨터를 지칭하고 IP를 생략해도 되는듯 0.0.0.0 과 같은 의미인거같음

 

브릿지로 구성하면 편할것같았는데 브릿지는 도커나 쿠버네티스를 테스트해보긴 어려울것같아서..

 

NAT 네트워크는 머신간의 통신이 쉽다는것같음

 

 

ifconfig  그냥구경용 

10.100.0.105 게스트 PC의 이더넷확인

 

웹서버를 띄운다.

 

외부에서 접속하면 잘되는것을 볼수있다.

 

호스트PC에서 호스트IP로 접속해보았다.

 

공인IP로 아이폰 접속

 

 

앱스토어 Termius 다운

terminal에

ssh user@hostname -p 2223

hostname은 외부에 노출되는 공용IP이고

user는 최종엔드포인트 유저, 여기선 root

패스워드도 root의 패스워드입력

ssh 포트는 보통 22를 사용하나 보안?상 2223사용

ssh root@공용IP -p 2223
공유기 포트포워딩
버츄얼박스 nat network 포트포워딩

접속한 IP를보면 공용IP가아니고 로컬 호스트IP이다.

그래도 외부에서 공용IP로 접속한 동일한 결과가 확인된다

 

virtualbox centos docker nginx:latest 외부 스마트폰으로 접속해보기

공유기 포트포워딩

docker run --name '컨테이너 명' -d '데몬으로 실행하기 위한 옵션' -p '호스트 포트':'컨테이너 포트' '이미지명'

 

-d는 지속적으로 실행하기 위한 옵션이고, -p는 포트포워딩을 한다는 의미입니다. 호스트 포트는 내가 열 포트의 번호이고, 컨테이너 포트는 위에서 Dockerfile을 만들때 설정한 80포트로 설정됩니다.

nginx의 레이어이고, EXPOSE 80으로 80포트를 사용하는것으로 확인
실행중인 컨테이너

버츄얼박스의IP:80으로 접속하면 연결이 거부됨

10.100.0.106:9001로 접속하면 페이지가 뜸

veth376111b는 컨테이너가 run상태일때만 존재함

도커엔진의 IP인 172.17.0.1:80으로 접속시 연결이 거부됨

172.17.0.1:9001로 접속하면 또 잘됨

 

그래서 유추할수있는것은 10.100.0.106 == 172.17.0.1 

패스쓰루되고있다는것 

sudo ss -lntu 열린포트 확인
docker inspect web : 컨테이너의 IP확인

 

IP만 확인 : docker inspect -f "{{ .NetworkSettings.IPAddress }}" web
잉? 172.17.0.2:80 응답이된다.
오히려 9001포트가 거부됨

그렇다는것은

버츄얼박스의IP와 도커엔진의 IP를 동일하게 패쓰쓰루해주는 무언가 있는것같고, 

Docker run -p 9001:80 했을때

9001은 도커엔진의 포트이고 80은 컨테이너의 포트를 의미하는것이였다...

vm의 포트 9001을 컨테이너 포트80에 매핑한다는것

 

 

 

아무튼

외부네트워크에서 스마트폰으로

공용IP:9001로 접속하면

 

스마트폰->공유기->윈도우->버츄얼머신->도커엔진->nginx컨테이너

이렇게 연결이 되서 잘표시되는것을 볼수있다.

 

 

 

 

 

 

그냥 구경용

# Docker 컨테이너가 서로 또는 Docker 호스트와 통신할 때 
# 일반적으로 브리지 네트워크(예: bridge0)를 사용합니다.
[root@docker-centos ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
a622a3e9ace1   bridge    bridge    local
8b064bca4745   host      host      local
bda7bd000f10   none      null      local

# 특정 네트워크를 검사하려면( bridge0적절한 네트워크 이름으로 교체):
[root@docker-centos ~]# docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "a622a3e9ace17a238f130263b90192684d17a924dbcecb75aba495d7827abdd9",
        "Created": "2023-11-03T18:42:46.416276655+09:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "8d923d5e0aebdc2549a4fb07bd070869af857952ba50c44b4639060df130840f": {
                "Name": "web",
                "EndpointID": "c3c844a29b76cf9d8a8f903e2076d546158f612f920b3544e03003d4d5edfc3a",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

# VM의 라우팅 테이블을 보려면
[root@docker-centos ~]# ip route
default via 10.100.0.1 dev enp0s3 proto static metric 100
10.100.0.0/24 dev enp0s3 proto kernel scope link src 10.100.0.106 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1