1. 들어가면서

최근 한국수력원자력의 내부자료유출 사건 기사를 보면 용의자가 중국 선양에 있는 VPN(가상 사설망)업체를 통해 한수원에 접속하여 정보를 빼낸 듯 하다는 말이 많이 나타난다. 예전의 농협 전산망 중단 사건 때도 VPN을 거쳐 농협 전산망에 접속한 흔적을 발견했다는 기사가 나곤 했다. 여기에 공통적으로 해킹의 수단으로 사용된 것이 VPN인데 해커들이 VPN을 통해 IP 주소를 우회해서 접속하였다는 것으로 마치 VPN이 IP 주소를 우회하는 수단으로 오해를 받고 있다.  뿐만 아니라 스마트폰 등에서도 VPN 앱을 검색하면 수많은 VPN 앱이 나타나는데, 대부분의 용도가 차단된 사이트를 우회해서 접속하거나 혹은 자신의 IP를 감추는데 사용할 수 있다고 되어 있다.

이러한 기사나 앱의 용도로 보면 VPN은 마치 보안을 뚫기 위한 도구로 오해하기 쉬우나 실제로 VPN은 안전한 네트워크 접속을 위한 도구로 개발되었으며 용도에 맞게 사용한다면 보안을 강화하는데 큰 도움을 줄 수 있다. 이 글에서는 VPN에 대한 유래와 기본적인 개념에 대해서 설명하고자 한다.



2. 사설망(Private Network)과 공중망(Public Network)

VPN에 대한 이해를 위해서는 먼저 사설망(Private Network)과 공중망(Public Network)에 대한 이해가 필요하다.

  • 사설망(Private Network)이란 특정한 회사나 조직이 소유하고 독점적으로 사용하는 네트워크를 의미한다.   위키피디아에서는 “사설 IP 주소 공간을 이용하는 네트워크이며 RFC 1918과 RFC 4193 표준을 준수한다. 이러한 주소는 가정, 사무실, 기업 랜에 쓰인다”라고 설명하고 있다.  쉽게 말해서 우리가 가정에서 공유기 내부에서 사설 IP로 사용하고 있는 네트워크가 대표적인 사설망이라고 보면 된다.
  • 공중망(Public Network)은 사설망과 대칭되는 개념으로 불특정 다수의 사용자에게 서비스를 제공하는 통신망으로 우리가 흔히 쓰고 있는 인터넷이 대표적인 공중망이라고 볼 수 있다.

우리가 알고 있는 대표적인 사설망으로는 회사 내부의 네트워크, 행정전산망이나 금융 기관에서 사용하고 있는 금융망 등을 들 수 있는데, 사설망은 보안과 일정한 통신 품질을 제공한다는 면에서 공중망에 비해 장점이 있다.

그런데 은행 등에서 본점과 지점을 사설망으로 연결하고자 할 경우에는 어떻게 연결할 것인지를 고민해보자. 가장 안전하게 연결하고 싶다면 본점과 지점을 전용회선으로 연결하고 이를 사설망으로 구축하면 될 것이다. 그러나 전용회선의 경우 보안성이나 품질 면에서는 인터넷 망에 비해서 뛰어날 수도 있으나(최근에는 인터넷이 품질이나 속도는 더 뛰어나다) 직접 전용망을 구축하거나 통신 사업자에게서 전용망을 임대하고 이를 연결하기 위한 전용 네트워크 장비를 도입하는데 막대한 비용이 소요된다.

보라넷전용선

위의 그림은 2000년대 초반 데이콤(현재는 LG U+)에서 서비스하던 보라넷 전용선의 가격이다. 그림에서 볼 수 있듯이 512Kbps의 속도를 내는 전용선을 임대하는 경우에도 수십에서 수백만원의 비용을 지불해야만 했음을 알 수 있다. 이러한 이유로 고가의 전용망을 대체하여 인터넷을 이용하여 사설망처럼 안전한 전용 네트워크를 구성하고자 하는 요구가 생겨났는데, 이러한 요구로 개발된 것이 바로 VPN(Virtual Private Network,  가상 사설망)이다. 최근의 기업 전용선 서비스는 저 당시의 전용선 서비스와는 달리 인터넷 망을 이용하여 고정 IP를 부여하는 서비스가 대부분으로 엄밀한 의미에서의 사설망이라고 볼 수는 없다. 물론 최근에도 기관간에 전용망을 구축해주는 서비스는 통신사업자들이 계속 수행하고 있으나, 그 비용은 여전히 높은 실정이다.



3. VPN의 개념

앞에서 설명한대로 VPN은 인터넷을 이용하여 고비용의 사설망을 대체하는 효과를 얻기 위한 기술로 인터넷망과 같은 공중망을 사용하여 둘 이상의 네트워크를 안전하게 연결하기 위하여 가상의 터널을 만들고 암호화된 데이터를 전송할 수 있도록 구성된 네트워크라고 정의할 수 있으며 공중망 상에서 구축되는 논리적인 전용망이라고 할 수 있다. 위키피디아에서는 다음과 같이 VPN을 정의하고 있다.

공중 네트워크를 통해 한 회사나 몇몇 단체가 내용을 바깥 사람에게 드러내지 않고 통신할 목적으로 쓰이는 사설 통신망이다. 가상 사설망에서 메시지는 인터넷과 같은 공공망 위에서 표준 프로토콜을 써서 전달되거나, 가상 사설망 서비스 제공자와 고객이 서비스 수준 계약을 맺은 후 서비스 제공자의 사설망을 통해 전달된다.

전용망-2

전용망 연결

vpn-1

VPN 연결

위의 그림에서와 같이 본점과 지점간에 전용망을 연결하는 것과 공중망(인터넷) 상에서 VPN 터널을 구성하고 VPN을 연결하는 것이 논리적으로 동일하다고 할 수 있으며, VPN은 인터넷을 통해 전용망과 같은 사설 네트워크를 구성할 수 있도록 해주는 기술이라고 이해하면 된다.


실제 vpn에 연결된 장면을 보면 이해하기 쉽다. 




위 이미지는 52.194.196.239의 공용ip를 가진 서버가 vpn을 통한 이후에는 10.8.0.10이라는 사설ip도 함께 가지게 되는 것을 보여준다.


52.194.196.239:443 접속  -> vpn 기동 -> 10.8.0.10의 사설ip 반환 






4. VPN 터널링 프로토콜

VPN 연결을 구성하는 가장 중요한 요소인 VPN 터널링 프로토콜은 크게 VPN 연결 지점간에 오가는 데이터 패킷의 암호화, VPN 터널의 생성 및 관리, 그리고 암호화 키 관리를 수행한다.  터널링 프로토콜은 데이터가 전송 네트워크를 통과할 수 있도록 하는 라우팅 정보를 포함한 헤더와 개인데이터를 캡슐화한다. 캡슐화된 프레임은 헤더에 추가되어 있는 라우팅 정보를 기반으로 인터넷과 같은 공중망을 경유하여 터널의 엔드포인트로 전송되고 목적지에 도달하면 디캡슐화 되어 최종 목적지로 향하게 된다.

NAT (Network Address Translation) - 주소 변환(http://darksoulstory.tistory.com/72)

 

내부가 사설 IP로 구축되었을 때 사설 IP가 가지는 가장 큰 문제점은 Routing 이 되지 않는 다는 점이다사설 IP로 설정된 Client에서 공인 IP를 가지는 Server로 서비스를 요청하는 경우(접속하는 경우목적지(Server)의 주소가 공인 IP 이므로 Routing이 되어 접속이 허용된다문제는 접속요구를 받은 Server Client로 응답을 보내주는 경우이다이 경우 Client IP가 사설 IP로 설정되었으므로 Routing이 되지 않으며정상적인 Network 서비스를 제공받을 수 없게 된다.


[그림1. 사설 IP에 대한 문제]

 

이러한 문제를 해결해 주기 위한 것이 바로 주소변환(NAT)이다사설 IP를 Routing이 되는 공인 IP로 변경해주는 기능을 주소변환(Network Address Translation)이라고 한다주소변환(Network Address Translation)은 쉽게 설명하면 전송되는 Packet IP 정보를 변경하는 기술이다.

 

1. NAT 필요성

 

1) 공인 IP 부족문제 해결

   - 내부 망 에서는 사설 IP를 사용하고외부 인터넷 망 접속 시 사설 IP를 공인IP주소로 변환하여 사용함 으로서 공인 IP부족문제를 해결한다.

 

2) 외부로부터 내부망을 보호 - 보안성 우수

   - 내부를 사설망 (사설IP)로 구축하여 인터넷(공인망)으로부터 보호 목적

   (사설 대역 IP는 인터넷 구간에서 라우팅이 되지 않는다.)

 

3) ISP변경에 따른 내부 IP변경 최소화

 

2. NAT의 종류

 

NAT의 종류는 Firewall 벤더사 마다 약간의 용어 차이가 있음을 미리 알린다.

 

1) Normal NAT (Port NAT) –N:1

 

NORMAL NAT는 사설 IP를 공인 IP로 변환 해주는 것으로, N개의 사설 IP를 하나의 공인 IP로 변환해 준다, N개의 사설 Client들이 하나의 공인 IP를 공유해서 인터넷을 사용하게 하는 것이다.

내부망에서 외부망으로 나갈 때 10000 ~ 60000번까지 Port만 변경해서 나간다.

[그림2. Normal NAT]

 

내부의 Client가 서버로 서비스를 요구하는 경우전송되는 Packet의 출발지 주소를 방화벽의 외부 IP(121.162.10.xxx)로 설정하면, Server의 응답은 방화벽으로 들어온다.

방화벽은 내부 사설 Client에서 전송된 패킷의 주소변환 정보를 갖고 서버로 보내온 응답을 해당 Client에 전달해 준다.

 

주소 변환 전 IP (Port)

주소 변환 후 IP (Port)

192.168.10.100 (1025)

121.162.10.xxx (10000)

192.168.10.101 (1156)

121.162.10.xxx (10001)

[표1. Normal NAT 변환]

 

2) Reverse NAT (Static NAT)

 

외부에서 내부의 사설 네트워크에 접속해야 하는 서버가 있는 경우 NORMAL NAT 설정만으로는 외부 에서 내부 서버로 접속할 수 없다그 이유는 NORMAL NAT에 설정된 공인 IP로 외부에서 접속요구를 했을 경우 방화벽에서는 N개의 사설 IP 중 어떤 IP로 변환해야 할지 알 수 없기 때문이다외부에서 접속해야 하는 내부망의 사설 서버에 대해서는 주소변환 설정을 따로 해주어야 하는데이때 설정해야 하는 주소변환이 REVERSE NAT 1:1 Mapping , Static Mapping 이라고도 한다외부에서 지정된 공인 IP로 접속을 요구하면 방화벽에서는 해당 공인 IP에 지정된 사설 IP로 패킷을 전달해 통신이 이루어진다.

[그림3. Reverse NAT]

 

① 외부의 Client에서 내부망에 존재하는 웹서버의 공인 IP로 웹 서비스를 요청한다.

  

출발지 IP

목적지 IP

121.161.10.xxx

121.161.10.xx1

 

② Firewall에서는 내부에 존재하는 웹 서버의 공인IP를 사설 IP로 주소 변환 한다.

 

웹 서버 공인 IP

주소 변환

웹 서버 사설 IP

121.161.10.xx1

192.168.10.100

 

③ 주소 변환 과정을 거친 Packet의 목적지 IP는 내부에 존재 하는 웹 서버의 사설 IP로 변경된다.

 

출발지 IP

목적지 IP

121.161.10.xxx

192.168.10.100

 

④ 내부에 존재하는 웹 서버가 Client에 대한 응답 Data를 보내면, Firewall은 다시 출발지 IP를 웹 서버의 공인 IP로 주소 변환 시킨다.

 

웹 서버 사설 IP

주소 변환

웹 서버 공인 IP

192.168.10.100

121.161.10.xx1

 

⑤ 주소 변환된 웹 서버의 공인 IP Client에 웹 서버의 Data가 전달 된다.

 

출발지 IP

목적지 IP

121.161.10.xx1

121.161.10.xxx

 

3) Redirect NAT

 

Redirect NAT는 목적지 주소를 재 지정할 때 사용한다예를들어 웹 서버가 장애 등이 발생하여 부득이 하게 사용 할 수 없는 경우 Redirect NAT 설정은 유용하게 사용된다.

웹 서버(192.168.10.100)의 장애로 서비스가 불가능 하지만외부에서는 웹 서버(121.161.10.xxx)로 접속을 해 올 것이다이에 대해 갑작스런 장애에 대한 공지를 하기 위해 방화벽에서 공지 전용 서버(192.168.10.101)로 목적지를 변경해 줄 수 있다. 192.168.10.100으로 접속요구 하는 것을 192.168.10.101로 변경해서 공지 내용을 전달해 준다이때 사용하는 것이 Redirect NAT이다.

[그림4. Redirect NAT] 

 

4) Exclude NAT

 

특정 목적지로 접속할 때 만 설정된 NAT를 적용 받지 않도록 할 때 사용한다방화벽 외부에 라우터가 있는 경우를 예로 들어 보자내부 관리자가 방화벽 외부에 있는 라우터에 접속할 때는 Normal NAT 적용을 받게 되는데내부 관리자에 대해 Normal NAT 적용을 받지 않고 라우터로 접속하도록 설정 할 수 있다.



출처: http://darksoulstory.tistory.com/72 [DarkSoul.Story]

본글출처:https://sharryhong.github.io/2017/09/27/cs-tcp-http/


TCP와 HTTP

OSI 7 계층 모형OSI 7 계층 모형


TCP(Transmission Control Protocol)

전송 계층(Transport layer)에 위치한다.

네트워크의 정보 전달을 통제하는 프로토콜이자 인터넷을 이루는 핵심 프로토콜의 하나

웹 브라우저들이 월드 와이드 웹에서 서버에 연결할 때 사용되며, 이메일 전송이나 파일 전송에도 사용된다.

근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.


Transport layer

계층 구조의 네트워크 구성요소와 프로토콜 내에서 송신자와 수신자를 연결하는 통신 서비스를 제공한다.

연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어, 그리고 다중화와 같은 편리한 서비스를 제공한다.



HTTP(Hyper-Text Transfer Protocol) 

http는 application 계층에서 동작 한다. 이 계층에서 동작하는 프로토콜은 http  말고도 smtp, IMAP 등이 있다. 

개념적으로 살펴 보자면 HTTP, HTTPS, FTP 등의 프로토콜은 TCP/IP  이 위에서 동작하는 거라고 볼수ㅣ있다.

그중 http는 tcp/ip 위에서 어떤 형태로 웹에서 작동할지를 정해놓은  통신프로토콜일 뿐이다. 이 프로토콜위에서  http (하이퍼텍스트)를 전송 하는 규약)임.




데이터 형태

tcp : byte array(binary)로 정보를 통신

http: String으로 정보를 통신




연결방식

tcp : 언제나 서버와 연결되어있어야하며, request 없이도 recevie가 일어난다.

http: keep-alive로 지속적인 연결은 가능하지만 기본적으론 close로 되어 있으며, request를 하여야만 recevie가 일어난다.


CIDR(Classless Inter-Domain Routing) 표기법


CIDR표기법허용 IP
192.0.0.0/8192.0.0.0 ~ 192.255.255.255
192.168.0.0/16192.168.0.0 ~192.168.255.255
192.168.67.0/24192.168.67.0 ~ 192.168.67.255



'0/n'은 
IP주소에서 처음부터 n비트수 만큼이 네트워크 주소를 의미하고, 나머지 뒤의 비트들은 호스트 주소임을 의미합니다.

예를 들어
10.25.0.0/16 = 00001010 00011001 00000000 00000000

빨간색은 네트워크 주소, 파란색은 호스트 주소를 의미합니다. 





IP/CIDR

Δ to last IP addr

Mask

Hosts (*)

Class

Notes

a.b.c.d/32

+0.0.0.0

255.255.255.255

1

1/256 C

 

a.b.c.d/31

+0.0.0.1

255.255.255.254

2

1/128 C

d = 0 ... (2n) ... 254

a.b.c.d/30

+0.0.0.3

255.255.255.252

4

1/64 C

d = 0 ... (4n) ... 252

a.b.c.d/29

+0.0.0.7

255.255.255.248

8

1/32 C

d = 0 ... (8n) ... 248

a.b.c.d/28

+0.0.0.15

255.255.255.240

16

1/16 C

d = 0 ... (16n) ... 240

a.b.c.d/27

+0.0.0.31

255.255.255.224

32

1/8 C

d = 0 ... (32n) ... 224

a.b.c.d/26

+0.0.0.63

255.255.255.192

64

1/4 C

d = 0, 64, 128, 192

a.b.c.d/25

+0.0.0.127

255.255.255.128

128

1/2 C

d = 0, 128

a.b.c.0/24

+0.0.0.255

255.255.255.000

256

1 C

 

a.b.c.0/23

+0.0.1.255

255.255.254.000

512

2 C

c = 0 ... (2n) ... 254

a.b.c.0/22

+0.0.3.255

255.255.252.000

1,024

4 C

c = 0 ... (4n) ... 252

a.b.c.0/21

+0.0.7.255

255.255.248.000

2,048

8 C

c = 0 ... (8n) ... 248

a.b.c.0/20

+0.0.15.255

255.255.240.000

4,096

16 C

c = 0 ... (16n) ... 240

a.b.c.0/19

+0.0.31.255

255.255.224.000

8,192

32 C

c = 0 ... (32n) ... 224

a.b.c.0/18

+0.0.63.255

255.255.192.000

16,384

64 C

c = 0, 64, 128, 192

a.b.c.0/17

+0.0.127.255

255.255.128.000

32,768

128 C

c = 0, 128

a.b.0.0/16

+0.0.255.255

255.255.000.000

65,536

256 C = 1 B

 

a.b.0.0/15

+0.1.255.255

255.254.000.000

131,072

2 B

b = 0 ... (2n) ... 254

a.b.0.0/14

+0.3.255.255

255.252.000.000

262,144

4 B

b = 0 ... (4n) ... 252

a.b.0.0/13

+0.7.255.255

255.248.000.000

524,288

8 B

b = 0 ... (8n) ... 248

a.b.0.0/12

+0.15.255.255

255.240.000.000

1,048,576

16 B

b = 0 ... (16n) ... 240

a.b.0.0/11

+0.31.255.255

255.224.000.000

2,097,152

32 B

b = 0 ... (32n) ... 224

a.b.0.0/10

+0.63.255.255

255.192.000.000

4,194,304

64 B

b = 0, 64, 128, 192

a.b.0.0/9

+0.127.255.255

255.128.000.000

8,388,608

128 B

b = 0, 128

a.0.0.0/8

+0.255.255.255

255.000.000.000

16,777,216

256 B = 1 A

 

a.0.0.0/7

+1.255.255.255

254.000.000.000

33,554,432

2 A

a = 0 ... (2n) ... 254

a.0.0.0/6

+3.255.255.255

252.000.000.000

67,108,864

4 A

a = 0 ... (4n) ... 252

a.0.0.0/5

+7.255.255.255

248.000.000.000

134,217,728

8 A

a = 0 ... (8n) ... 248

a.0.0.0/4

+15.255.255.255

240.000.000.000

268,435,456

16 A

a = 0 ... (16n) ... 240

a.0.0.0/3

+31.255.255.255

224.000.000.000

536,870,912

32 A

a = 0 ... (32n) ... 224

a.0.0.0/2

+63.255.255.255

192.000.000.000

1,073,741,824

64 A

a = 0, 64, 128, 192

a.0.0.0/1

+127.255.255.255

128.000.000.000

2,147,483,648

128 A

a = 0, 128

0.0.0.0/0

+255.255.255.255

000.000.000.000

4,294,967,296

256 A

 

 

참고.
http://en.wikipedia.org/wiki/CIDR



출처: http://jjeong.tistory.com/396 [jjeong]






라인과 같은 경우는 외부 url(웹훅)로 메시지를 직접 쏴준다. 즉, 라인서버가 외부에 리퀘스트를 보내면 외부에서 라인서버로 레스폰스를 해주는 일반적인 방식이다. 그러나 스카이프 비즈니스 어카운트의 경우 위와같은 플로우를 따른다.


1. login

스카이프는 유저로부터 받은 메시지를 가지고 있다가, 외부로부터 userID와 password가 요청과 들어오면, 그  userID와 password에 맞는 엑세스 토큰을 외부에 레스폰한다.


2. listen

엑세스토큰을 받은 외부서버는 엑세스 토큰으로 다시한번 스카이프에 요청하고, 그 엑세스토큰이 일치하면 드디어 메세지를 레스폰한다. 이때 외부서버는 login과 listen을 일정한 간격으로 지속적인 요청을 스카이프 서버에 보내야 하는데, 이를 pooling이라 한다.





リバースプロキシ (reverse proxy)

pointこの用語のポイント

pointプロキシだよ

pointWebサーバのパシリだよ

pointWebサーバの身代わりをするよ

スポンサーリンク

 簡単に書くよ

リバースプロキシ (reverse proxy)とは

恥ずかしがり屋なWebサーバさん用代理交渉人のこと。
もう少し真面目に書くと

Webサーバさんの身代わりになってホームページのファイルを返してくれるサーバさんのこと
です。

image piyo

 詳しく書くよ

プロキシは「Webブラウザさんの身代わりになってホームページアクセスしてくれるサーバさん」です。
詳細は用語「プロキシ」の解説をご覧ください。

リバースプロキシ

文字通り、このプロキシさんの逆バージョンが「リバースプロキシ」です。
普通のプロキシさんはWebブラウザの身代わりになってくれますが、リバースプロキシさんはWebサーバの身代わりになってくれます。

リバースプロキシ2

……と、いきなり言われても分かりませんよね。

大丈夫です。
順番に見ていきましょう。

あなたがホームページを見ようとすると、まず、ホームページを見るときに使うソフト(Webブラウザ)からホームページのファイルが置いてあるコンピュータ(Webサーバ)に対して「このページをおくれ」とお願いが出されます。

リバースプロキシ3

そのお願いに対して、WebサーバさんからWebブラウザさんに「ほれ、そのページだよ」とお返事がきます。

リバースプロキシ4

お返事を受け取ったWebブラウザさんは、受け取ったページを画面上に表示します。

リバースプロキシ5

これが普通にホームページを見るときの流れです。

ホームページが表示されるまでの流れは

1.Webブラウザ→「このページおくれ」→Webサーバ
2.Webブラウザ←「ほれ、そのページだよ」←Webサーバ


となります。

リバースプロキシ6

次に、普通のプロキシさんが混ざる場合の流れを見てみましょう。

普通のプロキシさんは「Webブラウザさんの身代わり」です。
Webブラウザさんは、まず、プロキシサーバさん(=普通のプロキシ)に対して「あのページを貰ってきておくれ」というお願いを出します。

リバースプロキシ7

次に、プロキシサーバさんがWebブラウザさんの代わりに「このページをおくれ」なお願いをWebサーバさんにします。

リバースプロキシ8

お願いを受け取ったWebサーバさんは、プロキシサーバさんに対して「ほれ、そのページだよ」とお返事を出します。

リバースプロキシ9

Webサーバさんからお返事を受け取ったプロキシサーバさんは、Webブラウザさんに「ほれ、そのページだよ」とお返事を出します。

リバースプロキシ10

プロキシサーバさんからお返事を受け取ったWebブラウザさんは、受け取ったページを画面上に表示します。

リバースプロキシ11

これが普通のプロキシさんが混ざった場合の流れです。

ホームページが表示されるまでの流れは

1.Webブラウザ→「俺の代わりにこのページ貰ってきておくれ」→プロキシサーバ
2.プロキシサーバ→「このページおくれ」→Webサーバ
3.プロキシサーバ←「ほれ、そのページだよ」←Webサーバ
4.Webブラウザ←「ほれ、貰ってきたページだよ」←プロキシサーバ


になります。

リバースプロキシ12

「ページをおくれ」とお願いする側を「クライアント」と呼びます。
「ほれ、そのページだよ」とお返事をする側を「サーバ」と呼びます。
「Webブラウザ+プロキシサーバ」で1つのクライアントなイメージです。
よく分からなければ、Webブラウザのパシリが普通のプロキシだと考えてください。

リバースプロキシ13

さぁ、いよいよ本題です。
ホームページを表示する流れにリバースプロキシさんが混ざる場合を見てみましょう。

流れにリバースプロキシさんが混ざった場合、Webブラウザさんはリバースプロキシサーバさん(=リバースプロキシ)に対して「あのページが見たい」というお願いを出します。

リバースプロキシ14

お願いを受け取ったリバースプロキシサーバさんは、本来のWebサーバさんに「このページをくれってきたよ」と伝えます。

リバースプロキシ15

それに対して、本来のWebサーバさんは「じゃあ、このページ返してあげて」とリバースプロキシサーバさんに対して、お返事をします。

リバースプロキシ16

本来のWebサーバさんからお返事を受け取ったリバースプロキシサーバさんは、Webブラウザさんに「ほれ、そのページだよ」とお返事します。

リバースプロキシ17

リバースプロキシサーバさんからお返事を受け取ったWebブラウザさんは、受け取ったページを画面上に表示します。

リバースプロキシ18

これがリバースプロキシさんが混ざった場合の流れです。

ホームページが表示されるまでの流れは

1.Webブラウザ→「このページおくれ」→リバースプロキシサーバ
2.リバースプロキシサーバ→「このページをくれってきたよ」→Webサーバ
3.リバースプロキシサーバ←「じゃあ、このページ返してあげて」←Webサーバ
4.Webブラウザ←「ほれ、そのページだよ」←リバースプロキシサーバ


になります。

リバースプロキシ19

普通のプロキシさんの場合は「Webブラウザ+プロキシサーバ」で1つのクライアントでしたが、リバースプロキシさんの場合は「リバースプロキシサーバ+Webサーバ」で1つのサーバになるイメージです。
よく分からなければ、Webサーバのパシリがリバースプロキシだと考えてください。

リバースプロキシ20

リバースプロキシを使うメリットは

(1).身元を隠せる
(2).負荷分散ができる


でしょうかね。

(1)のメリットは普通のプロキシと同じです。
矢面に立つのはリバースプロキシサーバさんです。
裏に控えるWebサーバの正体はバレません。

(2)はちょっとややこしいのですが、1つのリバースプロキシに複数のWebサーバを割り当てることができるのです。
普段は

Webブラウザ←→リバースプロキシサーバ←→Webサーバ

の流れですが、Webサーバを複数用意して

Webブラウザ←→リバースプロキシサーバ←→Webサーバ1、Webサーバ2、Webサーバ3

のようにすることもできます。

リバースプロキシ21

そうすれば、Webブラウザさんとやり取りする部分は何も変えないで、Webサーバさん1台あたりの大変さを減らすことができますよね?

リバースプロキシ22

そのようにして負荷分散に使えたりもします。

image piyo2

 一言でまとめるよ

まぁ「リバースプロキシ」って単語が出てきたら「Webサーバさんの身代わりなんだな~」と、お考えください。

一番上に戻るよ


Webhookって何?を子どもでもわかるように描いてみた
(https://kintone-blog.cybozu.co.jp/developer/000283.html)

시작하기전 임팩트있게 요약하면

어떤 데이타를 url(http post/get)을 이용해서 다른 서버로 리퀘스트 보내는 것.

はじめに

こんにちは。最近娘に絵本を読むのがめんどくさいダン吉です。今日は、巷で話題のWebhookとは何かをわかりやすく伝えるために、画力に圧倒的に自信のない私が恥を覚悟で、子どもによく描いてあげるような絵で表してみます。

Webhookとは

Webhookとは何?という方のために、cybozu developer network内のこちらのTipsの冒頭の記述を引用します。

Webhookとは(略)、Webアプリケーションでイベントが実行された際、外部サービスにHTTP で通知する仕組みです。
(参照)「コーディングなしで超簡単!kintoneのWebhookでGmailに通知する」-cybozu developer network

サービス同士の連携に使うものだとシステムに関わる方はピンと来ると思いますが、そうでない方にはちょっとまだかたいでしょうか。
IMG_20170215_0014.jpg

私も最初に聞いたときは、上のハンガーのフックのようなものを想像し、それでどうやって外部サービスに通知?と違和感を感じました。

そこで、「イベント」=何かのきっかけ、「HTTPで通知」=HTTPでデータを送る というイメージで脳内変換をしてみました。すると頭に浮かんできたのは、フックではなくてむしろ以下のこれでした。

lgi01a201402210300.jpg

投石機です。中世で使われたという兵器、カタパルトです。某オンラインゲームシリーズ界隈では有名ですね。しかし、今回は子どもでもわかりやすいイメージで伝えたいと思いますので、本当に下手なので恥ずかしい限りですが、このように表してみました。

じゃじゃん。

▼ Webhookのイメージ(子どもにもわかるカタパルトVer.)
IMG_20170215_0012.jpg

画力の関係で投石機がシーソーになってしまいましたがこのようなイメージです。あえて手描きのみです。

以下に補足の解説をします。

1. 送り手のサービスでデータの追加などの「きっかけ(event)」が起こる
2. 「きっかけ(event)」により、指定した「宛先※」へのHTTP通信が発生 ※ここでいう「宛先」とはURLのことです
→webhook URL로 request를 보내면(물론 http 프로토콜), 웹훅에서 request를 받아 일을 처리함
3. 指定した「宛先」へデータを送ることができる

もっとわかりやすくするために、イメージをパラパラマンガにしてみました。

▼ Webhookのイメージ(パラパラVer.)
1487106701.gif

いかがでしょうか。細かいところでつっこみどころはあるかもしれませんが、自分の娘(6歳)に「これ何かわかる?」と聞いたところ、「別のところに荷物をシーソーで送ってる!」と答えてもらえましたのでよしとしましょう。

Webhookで何ができるのか

そんなWebhook機能が、2017年2月版でkintoneに標準でつきました。
(ご利用にはスタンダードコースのご契約が必要です。)

具体的には、使える「きっかけ」としてアプリのレコード追加、編集、ステータスの更新のタイミングで、他のサービスにkintoneのデータを送ることができます。

たとえば、こんなことができます。

● kintoneのToDoアプリにレコードの追加があったら、Eメールやチャットで通知を受け取る
● kintoneで投稿管理アプリのレコードのステータスが「承認」になったら、レコードの内容をSNSに投稿する

ただし、ひとつ気をつけなければいけないことは、受け手のサービスに対応したデータの変換の必要です。

しつこく下手な絵、いきます。

▼ 送ったはいいものの、宛先で受け入れられない場合がある
IMG_20170215_0014 のコピー.jpg

ただ送っただけでは、データ形式が対応していないと受け入れてもらうことができません。そのため変換処理のプログラミングが必要になることがあります。Webhookで簡単にサービス連携ができると期待をした人は少し敷居が高く感じられるかもしれません。


1.設定方法

openfiles コマンド が機能するには事前に以下の設定、及び設定後のリブートが必要です。

C:\>openfiles /local on

成功: システム グローバル フラグ 'maintain objects list' は有効になりました。
システムを再起動すると、変更が有効になります。

(注意)ネットワーク経由で他のユーザが開いているローカルのファイル(ローカルサーバの共有を使用して他のユーザが開いているファイル)一覧は "openfiles /local on"の設定をしなくても一覧表示可能。
openfiles /query /v で出力されます。

2.一覧表示

現在開かれているファイルの一覧を表示するには以下のコマンドを実行します。

C:\>openfiles /query /v

以下例では test.txtを開いているプロセスを表示しています。ローカルファイルと共有ファイル(ネットワーク経由で他のサーバ開く)で結果が異なります。

(1)ローカルファイルの場合

C:\>openfiles /query /v | findstr test.txt
408 Administrator 1340 Hidemaru.exe C:\temp\test.txt

(注) 秀丸の「ファイルの排他制御」「読み書き禁止」でファイルを排他的に開いた場合。


(2)共有ファイルの場合(openfilesを実行しているサーバに対して、ネットワーク経由で他のユーザが開いているファイル)

C:\>openfiles /query | findstr test.txt
210 administrator Windows C:\temp\test.txt

(注) openfiles コマンドはリモートコンピュータ上の情報を見ることも可能です。

openfiles /query /s <ipアドレス> /u <ユーザ名> /p <パスワード>



(3)切断方法(強制クローズ)
●ローカルファイルの場合
ローカルで開いているファイルは切断(強制クローズ)できません。ファイルを開いているアプリケーションを終了させましょう。
(不明なプロセスがファイルを開いて削除できない場合などの強制ファイルクローズは不可となります。)

●共有ファイルの場合
openfilesを実行しているサーバに対して、ネットワーク経由で他のユーザが開いているファイルは切断(強制クローズ)が可能です。
以下の例ではネットワーク経由で開かれている test.txtを強制切断しています。

C:\>openfiles /query | findstr test.txt
210 administrator Windows C:\temp\test.txt

(上記ファイルはネットワーク経由でadministratorが共有を使用して test.txtを開いている)

C:\>openfiles /Disconnect /ID 210
成功: 開いているファイル "C:\temp\test.txt" への接続は切断されました。

C:\>openfiles /query | findstr test.txt
(結果無し)

(注)
ファイルを排他無しで開いている場合は開いているファイル一覧には表示されません。
例として、秀丸の「ファイルの排他制御」が「しない」の場合、結果の一覧に表示されません。「ファイルの排他制御」が「上書きだけ禁止」あるいは「読み書き禁止」の場合は表示されます。

3.設定を戻す

・/local on の設定を行うと性能が悪化します。よって設定が不要なら設定を戻すことを推奨します。

C:\>openfiles /local off

成功: システム グローバル フラグ 'maintain objects list' は無効になりました。
システムを再起動すると、変更が有効になります。


+ Recent posts