Search
moon
sun
✅

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”