•
시작하기 앞서 상원아 고맙다!
목표
•
학교에 공유기로 연결된 잭슨자비어를 우리집에서 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
•
끝
다음은 우리집에서 실행
•
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”