외부 -> 공유기 -> PC(호스트) -> virtualbox(게스트) 이런식으로 갈거다.
포트설정을 3번해야되는줄 알았다.
공유기에서 한번하고
윈도우에서 한번하고
버츄얼박스에서 한번하고
그런데 윈도우는 생략했는데 잘된다.
생략한 윈도우 포트포워딩 방법
현재 리스닝하는 포트를 보여줍니다
netsh interface portproxy show v4tov4
추가예시
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 그냥구경용
웹서버를 띄운다.
외부에서 접속하면 잘되는것을 볼수있다.
앱스토어 Termius 다운
terminal에
ssh user@hostname -p 2223
hostname은 외부에 노출되는 공용IP이고
user는 최종엔드포인트 유저, 여기선 root
패스워드도 root의 패스워드입력
ssh 포트는 보통 22를 사용하나 보안?상 2223사용
접속한 IP를보면 공용IP가아니고 로컬 호스트IP이다.
그래도 외부에서 공용IP로 접속한 동일한 결과가 확인된다
virtualbox centos docker nginx:latest 외부 스마트폰으로 접속해보기
docker run --name '컨테이너 명' -d '데몬으로 실행하기 위한 옵션' -p '호스트 포트':'컨테이너 포트' '이미지명'
-d는 지속적으로 실행하기 위한 옵션이고, -p는 포트포워딩을 한다는 의미입니다. 호스트 포트는 내가 열 포트의 번호이고, 컨테이너 포트는 위에서 Dockerfile을 만들때 설정한 80포트로 설정됩니다.
버츄얼박스의IP:80으로 접속하면 연결이 거부됨
10.100.0.106:9001로 접속하면 페이지가 뜸
도커엔진의 IP인 172.17.0.1:80으로 접속시 연결이 거부됨
172.17.0.1:9001로 접속하면 또 잘됨
그래서 유추할수있는것은 10.100.0.106 == 172.17.0.1
패스쓰루되고있다는것
그렇다는것은
버츄얼박스의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
'Network' 카테고리의 다른 글
고가용성 분산 메쉬 네트워크 tailscale 셀프 구축 학습계획 (0) | 2025.03.26 |
---|