<p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">K리그 작두왕(<a target="_blank" href="https://jakduk.com/" target="_blank" class="tx-link" style="color:#333333;text-decoration:none;">https://jakduk.com</a>)을 집에서 개발할때는 OpenVpn을 쓸일이 없었다. K리그 작두왕 FE 개발자도 생겨서 개발 편의성을 생각해야 했고, 나도 집 밖에서 개발을 할려고 하니 로컬에 따로 개발 환경을 구축하는게 귀찮았다. 로컬에서 DB와 Elasticsearch 등을 설치를 하지 않고 개발 DB, 개발 Elasticsearch 에 접속하기 위해 OpenVpn을 도입 하기로 했다.</p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">OpenVpn 설치는 아래의 문서를 참고하였다.</p> <span style="color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"></span> <ul><li>DigitalOcean - <a target="_blank" href="https://www.digitalocean.com/community/tutorials/how-to-setup-and-configure-an-openvpn-server-on-centos-7" target="_blank" class="tx-link" style="color:#333333;text-decoration:none;">https://www.digitalocean.com/community/tutorials/how-to-setup-and-configure-an-openvpn-server-on-centos-7</a></li> <li>AT BLOG - <a target="_blank" href="http://www.atblog.co.kr/?p=8837" target="_blank" class="tx-link" style="color:#333333;text-decoration:none;">http://www.atblog.co.kr/?p=8837</a></li></ul><p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">위 문서를 참고하여 OpenVpn 설치 및 기본 뼈대를 구성했고 추가적으로 K리그 작두왕 환경에 맞게 몇가지 바꾸었다.</p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">바꾼것은 다음과 같다.</p> <span style="color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"></span> <ul><li>K리그 작두왕 내부망으로 접근할때에만 VPN을 타도록 한다</li> <li>.ovpn(OpenVpn 클라이언트 설정) 파일 속에 인증서, 키를 넣는다</li></ul><div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">부연 설명을 하자면, K리그 작두왕의 서버 환경의 경우 모두 Private 네트워크 망에 위치한다. (192.168.35.0/24) 그리고 192.168.35.xx 로 연결을 시도할때에만 VPN을 사용하고 싶었다. (참고한 위 두 문서는 모든 네트워크 통신을 VPN을 통해서 하게 되어 있다.)</div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">또한 .opvn 파일을 작성할때 클라이언트에도 인증서 및 키 파일을 폴더에 따로 저장을 하는데 그것보단 .ovpn 파일 속에 있는게 더 편할것 같았다.</div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></div> <h3 style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;">서버 설정</h3> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">OpenVpn 설치 및 구동은 위에서 소개한 문서를 참고하자.</div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">OpenVpn을 서버에 설치하고, /etc/openvpn/server.conf 파일을 열어 편집한다.</div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">주석은 빼고 설정된 내용은 다음과 같다.</div> <div class="txc-textbox" style="margin:0px;padding:10px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;border:1px dashed rgb(203,203,203);"> <div style="margin:0px;padding:0px;">port 1194</div> <div style="margin:0px;padding:0px;">proto udp</div> <div style="margin:0px;padding:0px;">dev tun</div> <div style="margin:0px;padding:0px;">ca ca.crt</div> <div style="margin:0px;padding:0px;">cert server.crt</div> <div style="margin:0px;padding:0px;">key server.key # This file should be kept secret</div> <div style="margin:0px;padding:0px;">dh dh2048.pem</div> <div style="margin:0px;padding:0px;">server 10.8.0.0 255.255.255.0</div> <div style="margin:0px;padding:0px;">ifconfig-pool-persist ipp.txt</div> <div style="margin:0px;padding:0px;"><span style="background-color:#848484;color:#ffffff;">push "route 192.168.35.0 255.255.255.0"</span></div> <div style="margin:0px;padding:0px;">push "dhcp-option DNS 210.220.163.82"</div> <div style="margin:0px;padding:0px;">push "dhcp-option DNS 219.250.36.130"</div> <div style="margin:0px;padding:0px;">keepalive 10 120</div> <div style="margin:0px;padding:0px;">cipher AES-256-CBC</div> <div style="margin:0px;padding:0px;">user nobody</div> <div style="margin:0px;padding:0px;">group nobody</div> <div style="margin:0px;padding:0px;">persist-key</div> <div style="margin:0px;padding:0px;">persist-tun</div> <div style="margin:0px;padding:0px;">status openvpn-status.log</div> <div style="margin:0px;padding:0px;">log openvpn.log</div> <div style="margin:0px;padding:0px;">log-append openvpn.log</div> <div style="margin:0px;padding:0px;">verb 3</div> <div style="margin:0px;padding:0px;">explicit-exit-notify 1</div></div> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"></p> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">push "route 192.168.35.0 255.255.255.0" 은 따로 추가한 부분으로, K리그 작두왕의 서버들은 모두 192.168.35.0/24 의 Private IP를 갖고 있으므로, 이를 표현한 것이다. 즉, OpenVpn에서 192.168.35.x 로 연결을 시도할때에만 VPN을 사용하게 된다.</div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></div> <h3 style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;">클라이언트 설정</h3> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">OpenVpn 클라이언트는 몇개 있는데 개인적으로 TunnelBlick를 선호해서 터널블릭 기준으로 설명한다.</div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">OpenVpn을 로컬에 설치하고 나서 해야할 것은 OpenVpn 클라이언트 설정 파일을 만드는 것이다.</div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">jakduk.ovpn 이라고 명명하고 내용은 다음과 같다.</div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></div> <div class="txc-textbox" style="margin:0px;padding:10px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;border:1px dashed rgb(203,203,203);"> <div style="margin:0px;padding:0px;">client</div> <div style="margin:0px;padding:0px;">dev tun</div> <div style="margin:0px;padding:0px;">proto udp</div> <div style="margin:0px;padding:0px;">remote jakduk.com 1194</div> <div style="margin:0px;padding:0px;">resolv-retry infinite</div> <div style="margin:0px;padding:0px;">nobind</div> <div style="margin:0px;padding:0px;">persist-key</div> <div style="margin:0px;padding:0px;">persist-tun</div> <div style="margin:0px;padding:0px;">;comp-lzo</div> <div style="margin:0px;padding:0px;">verb 3</div> <div style="margin:0px;padding:0px;">cipher AES-256-CBC</div> <div style="margin:0px;padding:0px;"><br></div> <div style="margin:0px;padding:0px;"><ca></div> <div style="margin:0px;padding:0px;">-----BEGIN CERTIFICATE-----</div> <div style="margin:0px;padding:0px;">xxxx</div> <div style="margin:0px;padding:0px;">-----END CERTIFICATE-----</div> <div style="margin:0px;padding:0px;"></ca></div> <div style="margin:0px;padding:0px;"><cert></div> <div style="margin:0px;padding:0px;">-----BEGIN CERTIFICATE-----</div> <div style="margin:0px;padding:0px;">xxxx</div> <div style="margin:0px;padding:0px;">-----END CERTIFICATE-----</div> <div style="margin:0px;padding:0px;"></cert></div> <div style="margin:0px;padding:0px;"><key></div> <div style="margin:0px;padding:0px;">-----BEGIN PRIVATE KEY-----</div> <div style="margin:0px;padding:0px;">xxxx</div> <div style="margin:0px;padding:0px;">-----END PRIVATE KEY-----</div> <div style="margin:0px;padding:0px;"></key></div> <div style="margin:0px;padding:0px;"><br></div></div> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><ca> <cert> <key> 에는 OpenVpn 서버 설정시 생성했던 ca.crt, server.crt, server.key 파일의 내용을 차례대로 넣어주면 된다.</p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">생성한 jakduk.ovpn 파일을 마우스 더블 클릭하면 터널블릭에 추가된다. </p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">맥이라면 화면 상단에 터널블릭 아이콘이 있을것이다. 클릭해보자. </p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"></p> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201705/1495693467064a429b505843f185aac4db35c1f10d__mn66187__w547__h221__f251083__Ym201705__ANIGIF.gif" width="547" height="221" alt="kV2hn4lfLu.gif" style="border:none;"></div><br><p></p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">이제 ssh 명령어로 접속 하면 된다!</p> <p style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"><br></p> <h3 style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;">숙제</h3> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">만족하지 못한 몇가지가 있다.</div> <span style="color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;"></span> <ul><li>ID / Password 기반으로 전환</li></ul><div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">지금은 서버에서 생성한 인증서와 키로 VPN을 사용중이지만, 동일한 사용자가 동시에 접속이 안된다. (정확하게는 짧은 분 단위로 끊김)</div> <div style="margin:0px;padding:0px;color:#666666;font-family:'Noto Sans', sans-serif;font-size:14px;">따라서 회원제 방식으로 전환을 해야 여러 사람이 동시에 접속해도 끊기지 않을것 같다.</div>
홈서버를 구축하여 웹사이트를 만들어보자.
<a href="https://github.com/JakduK">github</a>
<a href="https://jakduk.com">K리그 작두왕</a>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.