This lesson is only available in Korean for now.
Lesson 14 of 20

터널 — 포트를 하나도 열지 않고 밖에 내놓는다

cloudflared 는 서버가 밖으로 거는 전화다

터널 — 포트를 하나도 열지 않고 밖에 내놓는다
밖에서 두드리는 게 아니라, 안에서 먼저 걸어 둡니다. 그러면 NAT 은 문제가 되지 않습니다.

13강의 문제는 밖에서 안으로 들어오는 게 막힌다는 것이었습니다. 그런데 안에서 밖으로 나가는 건 잘 되죠. 웹 서핑이 되니까요.

터널은 그 성질을 뒤집어 씁니다. 서버가 먼저 클라우드플레어로 전화를 걸어 두고, 그 선을 끊지 않습니다. 손님이 오면 클라우드플레어가 그 선을 타고 요청을 내려보내요.

포트포워딩과 터널을 나란히 놓고 봅니다. 방화벽을 조여 보세요.
Loading…

포트포워딩과 무엇이 다른가

포트포워딩
밖 → 안. 포트를 연다.
공인 IP 가 필요합니다. CGNAT 이면 불가능.
IP 가 노출되고, 봇이 곧바로 두드립니다.
cloudflared 터널
안 → 밖. 포트를 하나도 안 엽니다.
공인 IP 가 필요 없습니다. CGNAT 이어도 됩니다.
IP 가 노출되지 않습니다.

세우는 순서

$ cloudflared tunnel login # 브라우저가 열려 도메인을 고른다 $ cloudflared tunnel create mytunnel # UUID 와 자격증명 json 이 생긴다 $ cloudflared tunnel route dns mytunnel app.example.com # CNAME 레코드가 자동으로 만들어진다 $ sudo cloudflared service install # systemd 로 등록해 늘 살아 있게 한다

설정 파일 — 어느 이름을 어느 앱에

tunnel: <UUID> credentials-file: /etc/cloudflared/<UUID>.json no-autoupdate: true ingress: - hostname: app.example.com service: http://localhost:3019 - hostname: lab.example.com service: http://192.168.219.48:8765 originRequest: noTLSVerify: true connectTimeout: 30s - service: http_status:404 # 맨 끝에 반드시 하나

ingress 는 위에서부터 차례로 봅니다. 먼저 맞는 줄이 이깁니다. 맨 마지막 줄에는 hostname 없는 기본값이 반드시 있어야 하고요 — 없으면 시작하지 않습니다.

순서를 바꿔 보세요 — 와일드카드를 위로 올리면 app 이 가려집니다.
Python Runs in your browser
🤔 Check yourself
cloudflared 터널이 NAT 을 통과하는 원리는?
🤔 Check yourself
ingress 목록의 맨 마지막 줄에 반드시 있어야 하는 것은?