Search

220429_(완료)_Jetson Xavier에 포트포워딩하여 외부에서 웹서버 접속하게 하기

시작하기 앞서 상원아 고맙다!

목표

학교에 공유기로 연결된 잭슨자비어를 우리집에서 111.111.111.111:80으로 접속하면 되겠끔 하기!

기존 세팅

iptime A 공유기에 잭슨자비어가 유선으로 연결되어있음
잭슨 자비어 기기 이름은 “glory” 임
잭슨 자비어는 iptime에 192.168.0.4로 ip를 할당 받음
iptime은 학교측으로 111.111.111.111 ip로 할당 받음
잭슨 자비어의 22포트는 ufw로 확인해보니 방화벽으로 막혀있음
iptime기기에 포트포워딩 규칙이 다음과 같음
규칙명 (변경 가능) : nvidia
내부 IP (상기와 동일하게) : 192.168.0.4
프로토콜 (변경 불가능) : TCP
외부포트 : 2028
내부포트: 22
내가 만약에 핫스팟(다른지역 인터넷망)으로 잭슨 자비어에 접속하려고 할 때
glory@111.111.111.111 -p 2028
Kotlin
복사

시작

현재 인터넷은 교내 iptime A 공유기에 연결된 맥북환경에서 아래의 코드를 실행함
플라스크 웹 서버 코드는 다음과 같음
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!??' if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port="8080")
Python
복사
192.168.0.4:8080으로 실행가능

다른 환경 A1

현재 인터넷은 교내 iptime B 공유기에 연결된 맥북환경에서 아래의 코드를 실행함
플라스크 웹 서버 코드는 다음과 같음
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!??' if __name__ == '__main__': app.run(debug=True, host='127.0.0.1', port="7080")
Python
복사
http://127.0.0.1:7080/으로 접속 가능

다른 환경 A2

현재 인터넷은 교내 iptime B 공유기에 연결된 맥북환경에서 아래의 코드를 실행함
플라스크 웹 서버 코드는 다음과 같음
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!??' if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port="8080")
Python
복사
컴파일 환경
(glory) glory@glory-desktop:~/Desktop/glory/server$ python main.py * Serving Flask app 'main' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Running on all addresses. WARNING: This is a development server. Do not use it in a production deployment. * Running on http://192.168.0.4:8080/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 217-873-278
Python
복사
192.168.0.4:8080 접속 불가능
111.111.111.111:8080 접속 불가능
여기서 부터는 새롭게 iptime A 공유기에서 규칙을 설정해줘야함
iptime A 기기에 포트포워딩 규칙이 다음과 같음
규칙명 (변경 가능) : nvidia2
내부 IP (상기와 동일하게) : 192.168.0.4
프로토콜 (변경 불가능) : TCP
외부포트 : 8080
내부포트: 8080
다시 실행하면 111.111.111.111:8080 접속 가능

80번 포트로 열어서 실행하기

참고자료
플라스크 웹 서버 코드는 다음과 같음
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!??' if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port="80")
Python
복사
Flask apps are bound to port 5000 by default. To bind it to port 80, you would need to change the port as follows:
if __name__ == '__main__': app.run(host='0.0.0.0', port=80, debug=True)
And to run it:
# The normal invocation, but with a permission denied error (since port 80 is protected) python3 app.py
Works, but dangerous to run python as sudo sudo python3 app.py
A better option is to us authbind: sudo apt install authbind # Configure access to port 80 sudo touch /etc/authbind/byport/80 sudo chmod 777 /etc/authbind/byport/80
And to run the app: # The deep argument enables port binding permissions for the program being executed, as well as any other child programs spawned from it authbind --deep python3 app.py
요약하면 위험하지만 python3 main.py 명령어로 실행하고 아니면 아래처럼 이것저것 하라는 뜻이다.

다음은 우리집에서 실행

iptime C 공유기에 라즈베리파이가 무선으로 연결되어있음
라즈베리파이 기기 이름은 “pi” 임
라즈베리파이는 iptime에 192.168.0.22로 ip를 할당 받음
iptime은 우리집에서으로 222.222.222.222 ip로 할당 받음
iptime기기에 포트포워딩 규칙이 다음과 같음
규칙명 (변경 가능) : rasp1
내부 IP (상기와 동일하게) : 192.168.0.22
프로토콜 (변경 불가능) : TCP
외부포트 : 800
내부포트 : 80
규칙명 (변경 가능) : rasp2
내부 IP (상기와 동일하게) : 192.168.0.22
프로토콜 (변경 불가능) : TCP
외부포트 : 1042
내부포트: 1042
규칙명 (변경 가능) : nvidia2
내부 IP (상기와 동일하게) : 192.168.0.22
프로토콜 (변경 불가능) : TCP
외부포트 : 2028
내부포트 : 22
외부에서 vscode로 라즈베리파이 접속을 시도하려면 pi@222.222.222.222:2028 치면 됨

다른 환경 A4

현재 인터넷은 교내 iptime C 공유기에 연결된 맥북환경에서 아래의 코드를 실행함
플라스크 웹 서버 코드는 다음과 같음
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!??' if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port="1042")
Python
복사
iptime C 공유기에 연결된 맥북으로 192.168.0.22:1042로 접속 가능
LTE 핸드폰으로 222.222.222.222:1042로 접속 가능

다른 환경 A4

현재 인터넷은 교내 iptime C 공유기에 연결된 맥북환경에서 아래의 코드를 실행함
플라스크 웹 서버 코드는 다음과 같음
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!??' if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port="80")
Python
복사
iptime C 공유기에 연결된 맥북으로 192.168.0.22로 접속 가능
LTE 핸드폰으로 222.222.222.222:800로 접속 가능
LTE 핸드폰으로 222.222.222.222로 접속 시도하려고 하면 자꾸 공유기 화면으로 넘어감
그래서 규칙을 외부 80, 내부 100으로하고 이번에는 LTE 핸드폰으로 222.222.222.222로 접속 시도하려고 하면 다른 화면이 뜨면서 다른이유로 실행이 안됨 (이렇게 일단 공유기에 접근하는걸 막아놓았음)
학교 공유기인 111.111.111.111은 접속이 안되는 현상이 발생함 공유기라도 연결되어야 하는데 학교측에서 보안으로 막아둔 것으로 파악됨

안녕하세요

한국전자기술연구원 김영광입니다.
관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.

Hello

I'm Yeonggwang Kim from the Korea Electronics Research Institute.
For technical and business inquiries, please contact me at “glory@keti.re.kr”