블로그 이미지
훅크선장

카테고리

분류 전체보기 (362)
사진이야기 (23)
펭귄컴퓨팅 (121)
컴퓨터보안 (84)
돼지털세상 (12)
네트웍세상 (68)
신기한것들 (4)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

공지사항

태그목록

최근에 올라온 글

OpenWRT에서 WAN Interface 명칭과  LAN 인터페이스 명칭을 쉡 스크립트로 사용하여 알 수 있습니다.


Interface 명칭은 보통 eth0, eth1, 등등 인데, OpenWRT에서는 br-lan 이라는 인터페이스 명이 주로 내부 LAN 이름으로 사용됩니다.

UCI 명령어를 쓰면 인터페이스 명칭을 쉽게 알아낼 수 있습니다.


WAN 인터페이스 명칭 알아내기

uci -P/var/state get network.wan.ifname

결과값은

eth0

으로 출력됩니다만, 다른 장비들에서는 eth1 으로 출력되기도 합니다. 주의하셔서 보셔야 합니다.

LAN 인터페이스 명칭 알아내기

uci -P/var/state get network.lan.ifname

결과값은

br-lan

으로 대부분 출력됩니다.



위의 스크립트는 다양한 곳에서 사용할 수 있습니다.

대표적으로 방화벽 설정파일인 /etc/firewall.user 파일에 적용할 수 있습니다.


WANIF=$(uci -P/var/state get network.wan.ifname)

iptables -A INPUT -i $WANIF -p tcp --dport 21 -j ACCEPT

와 같은 식으로, WAN 인터페이스를 지정하는 스크립트를 장비의 출력값에 구애받지 않고 쓸 수 있는 장점이 있습니다.

Posted by 훅크선장
, |

OpenWrt Chaos Calmer 15.05 에서 테스트된 내용으로,

OpenVPN 클라이언트가 OpenWRT의 OpenVPN 서비스로 접속하여, 인터넷을 하기 위한 iptables 규칙을 설명합니다. (클라이언트의 패킷들이 OpenWRT 공유기를 통하여, 인터넷으로 Forwarding 되기 위한 조건)


/etc/firewall.user  파일에 다음과 같이 딱 세 줄만 추가하면 됩니다.


###OPENVPN PASS-THROUGH ENABLE RULES###

iptables -I INPUT -p udp --dport 1194 -j ACCEPT

iptables -I FORWARD -i tun+ -j ACCEPT

iptables -I FORWARD -o tun+ -j ACCEPT


앞의 첫째 줄,

iptables -I INPUT -p udp --dport 1194 -j ACCEPT

이것들은 1194 포트(OpenVPN의 디폴트 Listen 포트번호)로 들어오는 udp 패킷을 받아들이는 것입니다.

이 라인이 없으면, OpenVPN 서비스 접속 자체가 불가능합니다.

만약 특정 네트워크 인터페이스에서만, OpenVPN 서비스를 사용한다면, 다음과 같이 인터페이스를 지정할 수 있습니다.

iptables -I INPUT -i eth0 -p udp --dport 1194 -j ACCEPT


eth0는 예로 든 것입니다. 일반적으로는 ifconfig  명령을 실행한 다음, 인터넷과 연결된 WAN 인터페이스를 찾아야 합니다. 경험상으로 eth0 또는 eth1이 주로 WAN 인터페이스입니다만, 어느쪽이 될지는 OpenWRT가 설치된 장비에 따라 틀립니다. 반드시 확인하시기 바랍니다.


만약 OpenVPN을 tcp 모드로 사용한다면,  다음과 같이 수정해서 사용하여야 한다. (OpenVPN은 udp 모드로 사용해야 좋습니다. udp 모드가 tcp 모드에 비해 속도가 빠르다고 합니다.)

iptables -I INPUT -p tcp --dport 1194 -j ACCEPT

--dport 뒤에 쓰여진 1194 라는 번호도 역시 디폴트 OpenVPN 포트번호이므로, 혹시 다른 포트를 사용하기로 설정했다면, 여기도 수정해서 사용해야 한다.


그 뒤의 두 줄,

iptables -I FORWARD -i tun+ -j ACCEPT

iptables -I FORWARD -o tun+ -j ACCEPT

이것들은 OpenVPN으로 연결된(tun 디바이스명을 가진) 네트워크 어댑터들의 패킷들이 다른 네트워크 디바이스 쪽으로 서로 왕래할 수 있도록 합니다.


-i tun+ 가 있는 줄은 tun 디바이스 명을 가진 네트워크 어댑터에서 출발한 패킷들이 다른 네트워크 어댑터, 즉 OpenWRT 공유기의 LAN 영역이나 WAN 영역으로 전달될 수 있도록 하는 것입니다.

-o tun+ 가 있는 줄은 OpenWRT 공유기의 LAN 영역이나 WAN 영역에서 출발한 패킷들이(아마도 대부분은 윗 줄의 패킷들에 대한 응답들이 많은) tun 디바이스명을 가진 네트워크 어댑터쪽으로 다시 들어올 수 있도록 하는 것입니다.


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

대부분의 OpenWRT의  OpenVPN 서비스가 사용할 빈도가 적겠지만,

만약 OpenVPN 서비스에 접속한 외부의 클라이언트들이 OpenWRT 내부의 LAN 영역에만 접근가능하도록 하고, 인터넷을 사용하지 못하게 하려면, (ex. 회사내의 서버만을 연결하는 경우)


위에서 설명한 FORWARD 규칙 두 줄을 다음과 같이 수정하면 됩니다.

iptables -I FORWARD -i tun+ -d 192.168.1.0/24 -j ACCEPT

iptables -I FORWARD -o tun+ -s 192.168.1.0/24 -j ACCEPT


여기서, 192.168.1.0 네트워크는 OpenWRT의 내부 LAN  IP 대역을 지칭하는 것입니다. 여러분의 환경에 맞게 확인하시고 입력하시면 됩니다.


 -d 192.168.1.0/24 를 -o br-lan 으로,  -s 192.168.1.0/24 를 -i br-lan  으로 바꾸어 쓸 수 없습니다. (br-lan은 OpenWRT의 내부 LAN 영역을 지칭하는 디바이스명입니다.) 이유는 확실하지 않지만, 일단 br-lan 영역에 패킷이 들어오면, 공유기의 기본 기능으로 인하여, 패킷이 인터넷으로 포워딩되는 것 같습니다.

개인적으로는 'br-lan' 이라는 이름보다는 IP 주소를 명시적으로 사용하는 것이 직관적이라고 생각됩니다.

Posted by 훅크선장
, |

OpenWRT를 사용하다보면, USB 디스크 또는 메모리를 usb 포트에 꽂아서 마운트해서 사용하는데,

매번 시스템이 재시작될 때마다, 마운트를 다시 해주어야 하는 불편함이 있다.

왜냐하면, 기존에는 USB 디스크나 메모리의 파티션이 자동으로 디바이스로 인식되어서, 디바이스 명이 /dev/sda1 형태로 되어야만,

# mount /dev/sda1 /mnt

와 같이 명령어로 써야된다.


근데, 디바이스명은 가끔 부팅될때마다 달라질 수 있기 때문에 한계가 있었다.


최근에 OpenWRT 기능을 둘러보면서, 자동 마운트 방법을 알게 되었다.


root@HomeRouter:/etc/config# block info

/dev/mtdblock2: UUID="7f2dadbc-6ae00ebb-ea880768-13b88c63" VERSION="4.0" TYPE="squashfs"

/dev/mtdblock3: TYPE="jffs2"

/dev/sda1: UUID="db459e28-c32b-4f16-8dc1-2edee96031c2" NAME="EXT_JOURNAL" VERSION="1.0" TYPE="ext4"

root@HomeRouter:/etc/config# 


먼저 위와 같이, block info 라는 명령어로 USB  디스크의 UUID를 알아낸다.


그리고,

/etc/config/fstab 에 가서 다음과 같이 추가한다.

# vi /etc/config/fstab

...

중략

...

config mount

              option uuid 'db459e28-c32b-4f16-8dc1-2edee96031c2'

              option enabled '1'

              option target '/mnt'


그러면, UUID를 'db459e28-c32b-4f16-8dc1-2edee96031c2'로 가진 디바이스가 항상 /mnt 디렉토리로 자동 마운트가 된다.



그냥 아주 쉽게, LUCI 웹 인터페이스에서 메뉴 System -> Mount Points 에 들어가면, 설정할 수도 있다.




Posted by 훅크선장
, |

OpenWRT에서도 Web Proxy를 운용할 수 있다는 것을 최근에 알게되어서...


다음의 링크들을 보고 설정하였음.


http://wiki.openwrt.org/doc/howto/proxy.tinyproxy

https://forum.openwrt.org/viewtopic.php?id=40631



1. 설치하기

# opkg update

# opkg install tinyproxy luci-app-tinyproxy


2. tinyproxy 설정하기

서비스 활성화 먼저 하고, 

# /etc/init.d/tinyproxy enable


설정파일을 다음과 같이,

# vi /etc/config/tinyproxy


config tinyproxy

    option User 'nobody'

    option Group 'nogroup'

    option Port '8888'

    option Timeout '600'

    option DefaultErrorFile '/usr/share/tinyproxy/default.html'

    option StatFile '/usr/share/tinyproxy/stats.html'

    option MaxClients '100'

    option MinSpareServers '5'

    option MaxSpareServers '20'

    option StartServers '10'

    option MaxRequestsPerChild '0'

    option ViaProxyName 'tinyproxy'

    list ConnectPort '443'

    list ConnectPort '563'

    option enabled '1'

    option FilterExtended '1'

    option Filter '/lib/uci/upload/cbid.tinyproxy.cfg02822b.Filter'

    option FilterURLs '1'

    option LogLevel 'Connect'

    option Syslog '1'

    option enable '1'

    option Allow '192.168.1.0/24'


위에서 자신에 맞게 수정할 것은 딱 두개뿐

option Port '8888'    이것이 바로 프록시 접속 포트번호,  보통 프록시 포트는 3128을 많이 쓰지만, 자신이 원하는 포트로 변경해서 사용하기를 권장.

그리고, option Allow '192.168.1.0/24' 가 바로 접속을 허용할 IP 주소 영역을 지정하므로, 자신이 사용하는 IP 대역만을 지정하는 것이 필요.

(그냥 '0.0.0.0/24' 라고 모든 접속을 허용해 놓더라도, iptables 같은 방화벽에서도 충분히 필터링 할 수 있음. 어차피 방화벽을 열어야하기 때문에 많이 고민하지 않아도 됨.)


서비스 실행

# /etc/init.d/tinyproxy start    또는 restart


# lsof -i 명령어로 포트가 열리고, ps elf 로 서비스가 실행되었는지를 확인하기 바람.


3. 방화벽에 리다이렉트 룰과  IP 필터링 룰 설정하기

# vi /etc/config/firewall


위 방화벽 설정 파일에 다음 내용을 추가한다.


config redirect

    option _name 'proxy'

    option src 'lan'

    option proto 'tcp'

    option src_dport '80'

    option dest_port '8888'

    option src_dip '!192.168.1.1'

    option dest_ip '192.168.1.1'


여기서 가장 중요한 설정은 바로 192.168.1.1  IP 주소로, 반드시 현재 OpenWRT에서 사용하는 로컬LAN의 라우터  IP 주소를 써주어야 함!!

8888  포트 번호는 반드시 앞에서 tinyproxy 설정 포트번호와 동일해야 함.


# vi /etc/firewall.user


파일에 접속 허용을 추가한다.


iptables -I INPUT 1 -p tcp -s 220.25.11.1/24 --dport 8888 -j ACCEPT


위와 같이, 특정 IP 대역에서만 포트번호 8888로 접속할 수 있도록 설정한다.

만약 모든 곳에서 들어올 수 있도록 하려면, 그냥

iptables -I INPUT 1 -p tcp --dport 8888 -j ACCEPT

라고, 설정한다.

앞에서 tinyproxy의 option Allow ''를 이용해서, 접속 제한을 할 수 있다. 알아서 잘 선택하면 된다.


추가.

OpenWRT 같은 홈라우터에서 혼자서 사용한다면, 홈라우터 자원을 너무 많이 사용하면서 대기하지 않도록,

/etc/config/tinyproxy 설정 파일에서

Option MaxClients 와  Option StartServers 설정을 조금 낮춰주는 것이 좋다.




Posted by 훅크선장
, |

올해 2012년 3월부터 6월까지 “마이크로소프트웨어”에서 연재하였던 내용입니다.

잡지 지면상, 내용을 일부 삭제할 수밖에 없었는데,


2012년 연말에 과감하게 공개합니다.


“마이크로소프트웨어” 잡지의 “Developer Works”에 연재하기 위해서 작성한 문서의 풀버전입니다.

잡지에서 지면상 삭제된 내용까지 모두 포함되어 있습니다.


"프라이버시 보호를 위한 OpenWrt 유무선 공유기를 이용한 VPN 홈서버 구축” 문서를 보시고, 자기만의 서버를 집에 구축해보시기 바랍니다.


이 문서가 나온 이후에, 저는 Buffalo  WZR-HP-G450H 제품에서도 OpenWRT를 올리려고 하고 있습니다.

현재 안정된 공식 Firmware가 나오지는 않았지만, RC 버전으로 설치할 수 있습니다.

설치방법은 위에 공개한 문서내용과 동일합니다. (단, 펌웨어는 장비에 알맞는 것을 선택하셔야 합니다.)


http://downloads.openwrt.org/attitude_adjustment/12.09-rc1/ar71xx/generic/

에 가셔서,


openwrt-ar71xx-generic-wzr-hp-g450h-jffs2-tftp.bin

openwrt-ar71xx-generic-wzr-hp-g450h-squashfs-tftp.bin


위의 두 펌웨어 파일을 사용하면 됩니다.


그리고,

업데이트를 진행하는 노트북이나 PC의 IP 주소는 반드시 192.168.11.2 이어야 하고,

 

펌웨어 업데이트를 시작하기 전에, 공유기의  MAC 주소와 IP 주소를 static 으로 다음과 같이 설정해주어야 합니다.


# arp -s 192.168.11.1 02:aa:bb:cc:dd:23


주의: 공유기가 가진 MAC 주소가 아니라, 반드시 위에 쓰여진  MAC 주소를 사용해야 됩니다.

Posted by 훅크선장
, |

콘솔 즉, SSH 터미널 접속을 한 다음에, 다음 명령어로 맥주소를 자유롭게 바꿀 수 있다.

아래는 wan 쪽 주소를 바꾸는 예제이다.

# uci set network.wan.macaddr="<mac_address>"
# uci commit network
# ifdown wan && ifup wan

<mac_address> 의 예제는 01:23:45:67:89:ab 이다.

Posted by 훅크선장
, |

TP-LINK MR3420 제품에 OpenWRT 펌웨어를 업로드하는데 성공하였습니다.

국내에서는 동일한 하드웨어를 사려면, 거의 두 배 가격을 줘야되는데, 5만원 정도에 이정도 성능의 하드웨어를 구할 수 있다는 데에 참으로 감동~!






Posted by 훅크선장
, |

마이크로소프트웨어 4월호 목차 : 

http://www.imaso.co.kr/?doc=bbs/gnuboard.php&wr_id=39584&bo_table=article

중간에 보면,

Do It Yourself | 임베디드 리눅스 OpenWrt 알아보기│정계옥 168

국내에서 판매중인 유·무선공유기에 OpenWRT를 설치하고, VPN 서버등을 구축하는 글입니다.


실력도 미천하고, 글재주도 없지만, 그래도 한번 용기내서 써봤습니다.

비판은 잠시 접어두시고, 격려의 말만 받습니다.  * ^ ^ *


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

그런데, 4월 원고를 보내면서 “각주”를 넣었는데, 다 빠졌네요~.

원고 중에 다른 분들이나 다른  사이트에서 참고한 사항이 다 빠졌습니다.

4월 내용에서 국내의 OpenWRT 사이트 OpenWRT KR, http://openwrt.ssu.ac.kr/ 에서 자료를 많이 참고한 것에 대한 각주 내용이 누락된 것에 관련자 분들께 사과드립니다. 

5월 원고에는 참고한 사이트들을 추가하였습니다.

Posted by 훅크선장
, |

우연히 웹에서 뉴스들을 보다보니, 새로운 도구의 등장을 알게 되었다.


Network* protocol modelization by reverse engineering



네트워크 프로토콜을 분석해서, 시뮬레이션하고 퍼징까지 할 수 있다고 한다.

착하게도, 데비안 리눅스 패키지를 제공하고 있다.

계속 개발중이라는데, 아마 곧 있으면, BackTrack에 포함될 수도 있겠다~.


개인적으로 관심을 가지는, 네트워크 프로토콜 퍼징 분야라서 계속 주시할 예정이다~.

Posted by 훅크선장
, |
http://wiki.openwrt.org/toh/buffalo/wzr-hp-g300h
위 링크에 있는 내용대로, 버팔로 WZR-HP-G300NH 유무선 공유기의 시리얼 포트 디버깅에 성공하였습니다.


http://www.devicemart.co.kr/goods/view.php?seq=6185
위 링크의 UART-USB 보드를 구매하였지만, 입력 전압이 틀린 관계로 별수 없이 DC-DC 레귤레이터를 제작하여 연결하였습니다.

5V DC to 3.3V DC 레귤레이터는 LM317T 룰 이용하여 제작하였습니다.
제작방법은 다음 링크를 참조하였습니다.
http://miy-makeityourself.blogspot.com/2010/08/33v-regulated-voltage-supply.html


사진에 보이는 바와 같이, Molex 커넥터를 이용하여, 3단 연결을 해서, 약간 선이 길게 나오기는 했지만, 디버깅은 잘 되는 것 같습니다.

다음은 D-Link DIR-825를 시리얼 디버깅 시도할 차례입니다.
개봉박두~~.

다음은 시리얼 디버깅되는 내용을 캡쳐한 것입니다.
-------------------------------------------------------

BUFFALO U-BOOT Ver 1.07
AP83--539 (ar9100) U-boot 0.0.12
64 MB
Memory Test (address line)
Memory Test start(0x00000000) end(0x04000000) size(67108864)
Data line test start:0x00000000 pattern 0x00000001 0x00000003 0x00000007 0x0000000F 0x00000005 0x00000015 0x00000055 0xAAAAAAAA
Address line test start:0x00000000 len:0x4000000 pattern 0xAAAAAAAA 0x55555555 
Fill test patnum:5
fill Pattern 5555AAAA  Writing...   Reading...
fill Pattern AAAA5555  Writing...   Reading...
fill Pattern 0000FFFF  Writing...   Reading...
fill Pattern FFFF0000  Writing...   Reading...
fill Pattern AAAAAAAA  Writing...   Reading...
Top of RAM usable for U-Boot at: 84000000
Reserving 275k for U-Boot at: 83fb8000
Reserving 256k for malloc() at: 83f78000
Reserving 44 Bytes for Board Info at: 83f77fd4
Reserving 36 Bytes for Global Data at: 83f77fb0
Reserving 128k for boot params() at: 83f57fb0
Stack Pointer at: 83f57f98
Now running in RAM - U-Boot at: 83fb8000
Dev ID2:2222
Dev ID3:2201
Name: AMD-SPANSION Flash id: 0x1227E, Size: 33554432 bytes.
Flash: 32 MB
In:    serial
Out:   serial
Err:   serial
Memory Test
uboot use  83F57FB0 - 84000000
Memory Test start(80000000) end(83F00000) size(03F00000)
Pattern 00000000  Writing...  Reading...
Memory Test OK
### buf_ver=[1.07] U-Boot Ver.=[1.07]
### build_date(env)=[Dec 21 2009 - 10:37:11] build_date(bin)=[Dec 21 2009 - 10:37:11]
ag7100_enet_initialize...
: cfg1 0xf cfg2 0x7114
RTL8366 series driver, reading model-id...
  ID:0x6027, REV:0x6
rtl8366sr_phy_setup  ethUnit=0
Realtek 8366SR switch ID 0x8366
Realtek Greeen Ethernet Setup
eth0: 02:aa:bb:cc:dd:1a
eth0 up
: cfg1 0xf cfg2 0x7114
RTL8366 series driver, reading model-id...
eth1: 02:aa:bb:cc:dd:1a
eth1 up
eth0  02:AA:BB:CC:DD:1A
, eth1  02:AA:BB:CC:DD:1A

Trying eth0
eth0 is duplex
eth0 link down
FAIL
Trying eth1
eth1 link down
FAIL

tftp server(receive) go, waiting:4[sec]
Trying eth1
eth1 link down
FAIL
Trying eth0
eth0 is duplex
eth0 link down
FAIL
Load address: 0x81f00000

Abort
no file was loaded.
### main_loop entered: bootdelay=4

### main_loop: bootcmd="bootm 0xbe060000"
Hit any key to stop autoboot:  0
ar7100> help
autoscr - run script from memory
?       - alias for 'help'
TFTPS   - boot image via network as TFTP server
base    - print or set address offset
bdinfo  - print Board Info structure
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
bootelf - Boot from an ELF image in memory
bootm   - boot application image from memory
bootp    - boot image via network using BootP/TFTP protocol
bootvx  - Boot vxWorks from an ELF image
chpart    - change active partition
cmp     - memory compare
coninfo - print console devices and information
cp      - memory copy
crc32   - checksum calculation
dhcp    - invoke DHCP client to obtain IP/boot params
echo    - echo args to console
erase   - erase FLASH memory
exit    - exit script
flinfo  - print FLASH memory information
fsinfo    - print information about filesystems
fsload    - load binary file from a filesystem image
go      - start application at address 'addr'
help    - print online help
iminfo  - print header information for application image
imls    - list all images found in flash
itest    - return true/false on integer compare
ledb    - LED test blink
ledoff  - LED test off
ledon   - LED test on
ledt    - LED test toggle
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
ls    - list files in a directory (default /)
md      - memory display
mii     - MII utility commands
mm      - memory modify (auto-incrementing)
mtdparts- define flash/nand partitions
mtest   - simple RAM test
mw      - memory write (fill)
nfs    - boot image via network using NFS protocol
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
rarpboot- boot image via network using RARP/TFTP protocol
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
saveenv - save environment variables to persistent storage
set_inspection - set/unset inspection mode
setenv  - set environment variables
sleep   - delay execution for some time
test    - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
version - print monitor version
ar7100> version

U-Boot 1.1.4 for BUFFALO AIRSTATION (Dec 21 2009 - 10:37:11)
ar7100>

Posted by 훅크선장
, |