2015. 2. 20. 20:08

최근에 라즈베리파이2를 구매하게 되었습니다.


이것을 공유기로 사용하면 어떨까... 라는 궁금증에 실험을 한번 진행 해 보았습니다.




벤치비 사이트 이용하여 측정.

1. PC에서 직접 측정 시 속도




2. 라즈베리 파이2 를 거칠 경우의 속도




이어서 파이2 네트워크 통과 시 파이2에서 발생한 CPU 사용률 입니다.


예... 파이2는 쿼드코어 900 Mhz 입니다.


그.러.나...


어찌된 영문인지... 코어1만 풀로드 차고 나머지 코어는 띵가띵가 노는군요;;


라즈베리파이 2를 사서 공유기나 NAS 같은 네트워크 I/O 를 주 목적으로 사용하실분들은 참고 하세요~



[연결 설정한 경로 입니다]

인터넷 --> 파이2 이더넷(IN) -->USB to Ethernet(OUT) --> PC



일반 공유기의 CPU와 비교가 안될정도로 고성능임에도 성능하락이 발생하는 이유를 추측하자면...


1. USB 자체가 CPU에 부담을 주는걸로 아는데...

2. 라즈베리 파이2 에는 전용 이더넷 칩이 달려있지 않고 USB to Ethernet 으로 구현되었으며,

3. OUT 용으로 붙인 이터넷 역시 USB to Ethernet 이므로...

4. IN / OUT 트래픽 모두 USB 에서 처리하느라 CPU가 고생(?)이랴 ~



... 2, 3,4 번 코어가 띵가띵가 노는 현상은 조사를 좀 해봐야 할 듯 합니다.

찾으면 보충하도록하고... 여기 까지 줄입니다. ^__^





아래 참고용으로 하나더 추가합니다.

2007년 9월에 산 코어2듀오 T7300 노트북에 데비안 설치 후 진행하였습니다.

연결경로는 파이2와 동일하며, 파이2 대신 노트북이 위치합니다.


코어2듀오 T7300 CPU 노트북



노트북 네트워크 통과시 CPU 점유율


... 에, 뭐 3% 미만에서 여유롭게~ 놀고 있습니다 -_-;;




Posted by 해비
2015. 1. 28. 13:30

Tomcat 설치




다운로드

http://tomcat.apache.org/



­압축해제

# tar ­-zxf apache­-tomcat­-8.0.17.tar.gz ­-C /usr/share/tomcat8



­링크설정

# ln -­s /usr/share/tomcat8/apache-­tomcat­-8.0.17 /usr/share/tomcat

- 링크 설정을 하는 이유는 나중에 버젼업이 되어 새 버젼의 톰캣을 설치후 링크 를 변경하는 것으로 다른 파일들의 톰캣 경로를 그대로 사용하고자 함 입니다.


­톰캣계정 추가

# useradd tomcat



­소유권 변경, 실행권한 설정

# chown -­R tomcat:tomcat /usr/share/tomcat8
# chmod +x /usr/share/tomcat/bin/*.sh

- 톰캣 ­8.0.17버젼에서는 기본적으로 실행권한 설정이 되어 있었다.



톰캣 시작/종료

sudo /bin/su ­ - tomcat ­-c /usr/share/tomcat/bin/startup.sh
sudo /bin/su ­ - tomcat ­-c /usr/share/tomcat/bin/shutdown.sh



­시작/종료 스크립트 생성

# vi /etc/init.d/tomcat

#!/bin/sh
### BEGIN INIT INFO
# Provides: Tomcat
# Required­Start: $network
# Required­Stop: $network
# Default­Start: 2 3 5
# Description: Java Servlet and JSP Engine
### END INIT INFO

case "$1" in
'start')
/bin/su ­ - tomcat ­-c /usr/share/tomcat/bin/startup.sh
;;
'stop')
/bin/su ­ - tomcat ­-c /usr/share/tomcat/bin/shutdown.sh
;;
*)
echo "Usage: $0 { start | stop }"
;;
esac
exit 0



실행권한 부여

# chmod 755 /etc/init.d/tomcat



자동시작 등록

update­rc.d tomcat defaults

- 부팅 시 자동으로 톰캣 서버가 실행되도록 한다.



자동시작 제거

update­rc.d -­f tomcat remove



관리페이지 경로 변경

도메인 루트는 서비스에 사용하면서 동시에 톰캣 관리 페이지를 사용하고자 할때, 관리페이지 접근경로를 변경 한다.


/usr/share/tomcat/webapps/ROOT

톰캣 루트 경로 이다.


관리 페이지에 접근시 사용할 경로(이하 여기서는 /tcman) 으로 한다.

/usr/share/tomcat/webapps/ROOT/tcman 폴더 생성


/usr/share/tomcat/webapps/ROOT/ 폴더에서 WEB­INF 폴더를 제외한 모든 파일을 tcman 으로 이동


톰캣 재기동

/etc/init.d/tomcat stop

/etc/init.d/tomcat start


이제 /tcman 을 붙여야지 관리페이지로의 접근이 가능하다.

물론 / 로 접근 시 404 오류를 내뱉을 것이다. 파일 없다고...


오류 보기가 싫으면 index.html 하나 만들어서 임시로 넣어두는 것도 좋은 방법~

- 관리페이지 경로 변경은 제가 생각한 방법인데, 더 좋은 방법이 있을지는 모르겠네요...





- 참고 -

http://wolfpaulus.com/jounal/software/tomcat_squeeze/comment­page­1/#comment­60189
http://fruitdev.tistory.com/19
https://www.debian­administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian






Posted by 해비
2015. 1. 28. 13:11

Oracle JDK 설치

리눅스에 기본 설치된 OpenJDK 또는 JRE ? 대신 오라클에서 제공하는 자바 가상머신 설치 방법에 대해 설명합니다.


모든 과정은 Root 권한으로 진행합니다.

매 구문마다 sudo 명령어를 붙여서 진행해도 되지만 불편하다면 su - root 로 아예 루트권한으로 바꾼 후 작업 합니다.




다운로드

오라클 사이트에 가서 최신 자바 JDK를 다운로드 합니다.

http://www.oracle.com/technetwork/java/index.html




­압축해제

# tar ­-zxf jdk-­8u31-­linux­-x64.tar.gz ­-C /opt/jdk/

- 표시된 부분의 파일명은 JDK 버젼과 OS 버젼에 따라 다릅니다. 알아서 수정할 것!




설치확인

# ls /opt/jdk/
jdk1.8.0_31

- ls 명령어 실행 시, jdk어쩌고 폴더가 리스트에 있다면 성공적으로 설치된 것 입니다.


기본JDK설정 (2개 다 실행한다)

# update­alternatives --­­install /usr/bin/java java /opt/jdk/jdk1.8.0_05/bin/java 100
# update­alternatives ­­--install /usr/bin/javac javac /opt/jdk/jdk1.8.0_05/bin/javac 100

(노란배경 부분은 설치확인 명령에서에 확인된 폴더명으로 버젼에 맞게 수정한다.)

- java, javac 명령어 입력 시 현재 설치된 것을 불러오도록 설정 합니다.


기본설정 확인

# update­alternatives ­­--display java
# update­alternatives ­­--display javac

- ­ 자바 버젼을 계속 구 버젼 참조하면 우선순위 변경(표시된 위치는 알아서 시스템에 맞게 수정)




우선순위 변경

# update­alternatives ­­--install /usr/bin/java java /usr/lib/jvm/java­6­openjdk­amd64/jre/bin/java 90

- 맨 뒤의 숫자가 클 수록 우선순위가 높다. 우리가 설정한 수치는 100 이었으므로 100 보다 작은 수로 지정을 한다.

- 기존 것 손대기 싫다면, 저위에 수치를 100 대신 기존 수치 보다 더 높은 값으로 지정해 주면 된다.






- 참고 -

https://www.digitalocean.com/community/tutorials/how­to­manually­install­oracle­java­on­a­debian­or-
ubuntu­vps






Posted by 해비
2015. 1. 24. 08:46

SSH 터널을 이용한 VNC 연결




Putty 설정 창으로 가서...

접속 > SSH > X11 > X11 포워딩 사용 항목 체크




접속 > SSH > 터널링 > 원포트 5900, 로컬, 127.0.0.1:5900 추가
(포트 번호는 상황에 맞게 수정 필요함, 여기서는 0번 디스플레이사용으로 가정함)




x11vnc 접속 예시.

- 뭔가 휑한 빈화면 보여주는건 좀 그렇다 싶어서 최대한 있어보이게(?) 만들고 캡쳐~






사용된 x11vnc 시작 명령어

 sudo x11vnc -auth guess -display :0

- sudo 안 붙이고 그냥 적으니까 display:0 번 어쩌고 오류남...(이유는 모르겠는데 아마 특정 파일에 접근이 안되나 봄)






[내용추가]

1. VNC 서버를 현재 데스크탑 화면을 직접 조정

apt-get install x11vnc 

하나의 데스크탑이 공유되므로 동시에 같은 화면을 보게 됩니다.



2. 별도의 가상 데스크탑 화면으로 접속

apt-get install tightvncserver

각각 독립적인 가상의 데스크탑으로 접속되므로 별도의 화면에서 작업하게 됩니다.





Posted by 해비
2015. 1. 10. 19:26

동일한 어플이 중복 설치된 버그(?)



용량... 관리하다 보니 똑같은 어플이 2개가 딱!!!

가운데 Solar Walk 가 2개가 나란히~




그래서 찾아서 밖으로 꺼집어 냈습니다.

어쩌다 이렇게 된건지는...;;




안에 들어가서 상세 정보를 봤는데...

도큐멘트 및 데이터가 양쪽이 틀린거로 봐서 이건 확실히 어플 중복설치가 틀림없어 보입니다.

왜 이렇게 된건지는 모르겠지만...




해결을 위해... 둘다 삭제 후 다시 새로 설치~ (-_-);



Posted by 해비
2015. 1. 10. 10:27

L2TP VPN서버 구축



L2TP 의 장점은 아래 사이트에 자세히 비교가 되어있습니다.

http://kr.giganews.com/vyprvpn/compare-vpn-protocols.html


요약하자면, 보통의 공유기에 내장된 PPTP VPN 보다 보안성이 뛰어나면서 iOS 디바이스에 적용 가능한 유일한 프로토콜!

안드로이드나 PC같은 경우는 OpenVPN 이 더 나을수도 있습니다만 아이폰은... ㅠㅠ;;


L2TP가 설치되는 서버가 방화벽 아래에 있다면 반드시 아래의 포트를 열어 주셔야 합니다.

TCP

 1701

UDP

 4500

UDP

 500






전체 설치 과정

1. 프로그램 설치
2. 설정
    2.1 OpenSwan 설정
        2.1.1 l2tp-psk.conf 설정
        2.1.2 ipsec.conf 설정
        2.1.3 ipsec.secrets 설정

    2.2 xl2tpd 설정
        2.2.1 xl2tpd.conf 설정
    2.3 ppp 설정
        2.3.1 options.xl2tpd 설정
        2.3.2 chap-secrets 설정
3. 서비스 재시작 




1. 프로그램 설치

apt-get install openswan xl2tpd ppp

3개의 패키지를 설치 합니다.




2. 설정

2.1 OpenSwan 설정

2.1.1 l2tp-psk.conf 설정

/etc/ipsec.d/l2tp-psk.conf

-------------------------



conn L2TP-PSK-NAT
     rightsubnet=vhost:%priv
     also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
     authby=secret
     pfs=no
     auto=add
     keyingtries=3
     rekey=no
     dpddelay=10
     dpdtimeout=90
     dpdaction=clear
     ikelifetime=8h
     keylife=1h
     type=transport
     left=192.168.0.100
     leftprotoport=17/1701
     right=%any
     rightprotoport=17/%any

- left=192.168.0.100 이 부분은 현재 자신이 할당받은 IP를 적어준다. (예 : eth0 에 할당되어 있는, 실제 인터넷에 연결된 IP주소)



2.1.2 ipsec.conf 설정

/etc/ipsec.conf

---------------



version 2.0

config setup
     dumpdir=/var/run/pluto/
     nat_traversal=yes
     virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:25.0.0.0/8,!%v4:10.0.1.0/24,%v6:fd00::/8,%v6:fe80::/10
     oe=off
     protostack=netkey

include /etc/ipsec.d/l2tp-psk.conf



2.1.3 ipsec.secrets 설정

/etc/ipsec.secrets

------------------



192.168.0.100 %any:    PSK "secretcode"

- 앞의 IP주소는 2.1.1 항목과 동일하게 설정, PSK 는 사전 공유된 비밀키 인데 임의로 복잡하게 설정하여 쉽게 알아내거나 유추하지 못하도록 설정 한다.

- VPN 연결 시, 접속하려는 모든 사용자는 이 PSK 코드를 알고 있어야 접속 가능하다.




2.2 xl2tpd 설정

2.2.1 xl2tpd.conf 설정

/etc/ipsec.secrets

------------------



[global]

[lns default]
ip range = 10.7.0.2-10.7.0.20
local ip = 10.7.0.1

length bit = yes
require chap = yes
refuse pap = yes
require authentication = yes
pppoptfile = /etc/ppp/options.xl2tpd 

- iprange : VPN에 연결된 클라이언트가 할당받을 IP대역입니다.

- local ip : VPN서버 자신이 할당받을 IP 입니다.




2.3 ppp 설정

2.3.1 options.xl2tpd 설정

/etc/ppp/options.xl2tpd

----------------------



require-mschap-v2
ms-dns 168.126.63.1
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4



2.3.2 chap-secrets 설정

/etc/ppp/chap-secrets

-----------------------



# Secrets for authentication using CHAP
# client    server    secret            IP addresses
user1    l2tpd    password1    *
user2    l2tpd    password2    *

- 사용자ID, 서버타입, 암호, IP주소 순으로 나열해서 적어주면된다.

- IP주소에 * 대신 10.7.0.3 이런식으로 할당해서 지정해 놓을수도 있다.

  (이 경우, 동일 ID로 2번째 접속한 사람은 중복IP로 인하여, VPN네트워크가 정상적으로 동작하지 않는다.)




3. 서비스 재시작

sudo service xl2tpd start 

sudo service ipsec start

- 이미 서비스가 시작되어 있다면, restart 명령어로 재시작 한다.




#. 인터넷 연결을 위해 체크할 사항들

NAT 설정

iptables -t nat -A POSTROUTING -s 10.7.0.0/24 -o eth0 -j MASQUERADE


포워딩 설정

sysctl -w net.ipv4.ip_forward=1


- 리붓시 다시 설정이 필요합니다.

- 인터넷 연결이 안되어 본 명령어 적용시 현재 연결중인 VPN끊고 다시 연결 하셔야 합니다.

- 상세 정보는 아래 링크로 대체 합니다.

http://haebi.kr/entry/iptables를-사용한-인터넷-공유설정
http://haebi.kr/entry/ipv4forwarding-확인-및-설정






1. 아이폰에서 VPN설정 후 연결하여 테스트 진행.

2. VPN연결되면 상단에 VPN 마크가 표시됨.

3. 그런데 인터넷이 안되는 상황 발생...?

4. iptables MASQUERSDE 설정으로 VPN IP에 인터넷 공유가  필요 (아래 링크)

    http://haebi.kr/entry/iptables를-사용한-인터넷-공유설정

5. 잘 안된다면 기존의 설정파일을 여기 설정으로 대체 하자!! (기존 파일이 필요할지도 모르니 백업은 알아서들 하시고~)



- [2015.01.12] iOS에서도 해당 어플 설치 시 OpenVPN이 됩니다.

- [2015.01.15] 인터넷 연결시 추가로 확인할 사항을 본 포스트에 추가 하였습니다.



참고 : http://blog.iolate.kr/122



Posted by 해비
2015. 1. 10. 09:22

iptables를 사용한 인터넷 공유설정



iptables -t nat -A POSTROUTING -s 10.7.0.0/24 -o eth0 -j MASQUERADE

-s 뒤에 오는 것은 소스IP 의 대역입니다.(공유된 인터넷을 사용할 내부 IP)

-o 뒤에 오는 eth0 은 실제 인터넷에 연결된 이터넷 장치 입니다.



위 예문은 10.7.0.0 의 IP 대역으로 부터의 패킷을 etho 으로 -j 점프(?) 시킨다 입니다.

(로컬 IP대역은 각자 상황에 맞게 수정하여야 합니다.)


-s 뒤에 /24 는 서브넷 마스크 255.255.255.0 을 의미 합니다.




왜 24 라는 숫자가...?


서브넷 마스크(255.255.255.0)를 2진수로 풀어내면 아래와 같이 됩니다.

255

 255

 255

 0

 11111111

 11111111

 11111111

 00000000


여기서 1의 갯수가 총 24개 !! 바로 이것입니다.


1이 1개 더 증가해서

11111111.11111111.11111111.10000000 이라면


서브넷 마스크 는

255.255.255.128 이 되겠군요...




이렇게 했는데 그런데 안되쟎...?


제 경우 ipv4_forwarding 설정이 0 이어서 안된 경우가 있었습니다. 덕분에 리눅스 재설치 까지 해가며 삽질을...;;

ipv4_forwarding 설정을 확인 하시고, 1로 설정한 후 네트워크 서비스를 재시작 하였더니 바로 잘 동작하였습니다.



ipv4_forwarding설정 방법

http://haebi.kr/entry/ipv4forwarding-확인-및-설정



Posted by 해비
2015. 1. 10. 09:03

현재 포워딩 상태 확인

sysctl net.ipv4.ip_forward




ipv4 패킷 재전송을 허용하고자 하는경우, 아래와 같이 설정한다.


vim /etc/sysctl.conf

net.ipv4.ip_forward=1


# 으로 주석처리 되어있는 경우, 주석을 제거하고, 0 으로 설정 또는 아예 없는 경우 추가 및 수정한다.

이 파일 수정 시 매 부팅마다 자동 적용된다.




만약, 현재 시스템 가동중에만 수행하고 재부팅시 리셋되기를 원한다면 아래 명령어를 입력한다.

sysctl -w net.ipv4.ip_forward=1




작업 후, 네트워크 서비스 재시작을 하여야 적용된다.

네트워크 서비스 재시작 방법

http://haebi.kr/entry/Network-Service



p.s.

Debian Linux 에서 작업한 내용이며, 다른 계열의 리눅스 에서는 다를 수 있습니다.


출처 : http://linuxpoison.blogspot.kr/2008/01/how-to-enable-ip-forwarding.html

Posted by 해비
2015. 1. 10. 08:55

네트워크  서비스 재시작, 시작, 종료 명령어



레드헷 계열

# service network restart
OR
# /etc/init.d/network restart

To start Linux network service:
# service network start

To stop Linux network service:
# service network stop



데비안 계열

# /etc/init.d/networking restart

To start Linux network service:
# /etc/init.d/networking start

To stop Linux network service:
# /etc/init.d/networking stop




출처 : http://theos.in/desktop-linux/tip-that-matters/how-do-i-restart-linux-network-service/


Posted by 해비
2014. 12. 3. 15:11



소스코드

using System.Runtime.InteropServices;


...

Some Class ...


        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

        private int WM_IME_NOTIFY         = 0x0282;
        private int WM_DESTROY            = 0x0002;
        private int WM_NCDESTROY          = 0x0082;
        private int WM_CLOSE              = 0x0010;
        private int IMN_CLOSESTATUSWINDOW = 0x0001;
        private int WM_KILLFOCUS          = 0x0008;
        private int WM_COMMAND            = 0x0011;


...


        protected override void WndProc(ref Message m)
        {
            if(m.Msg == (int)WM_CLOSE)
            {
                MessageBox.Show("X 눌렸엉 ㅠㅠ");
            }

            base.WndProc (ref m);
        }




Form1_Closing() 역시 종료 할때 발생합니다만, 그 이전에 WndProc 가 먼저 처리 됩니다.


X 눌렸을 때 막고, 닫기 버튼을 눌렀을 경우에만 종료 시키려면 Form1_Closing() 메서드에 e.Cancel = false; 주되, 특정 변수값 세팅이면 true 로 주면 되겠네요.


닫기 버튼은

변수 값 세팅, form.Close() 주면 될 것이고


우상단 X 는

WndProc에서 변수값 세팅해 주면 될 것이고~ 



그냥 Form1_Closing() 에 e.Cancel = false; 만 주면 불사속성을 지닌 창을 마주하게 될 겁니다. 





Posted by 해비