블로그 이미지
훅크선장

카테고리

분류 전체보기 (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

공지사항

태그목록

최근에 올라온 글

이미 유·무선공유기가 존재하는 환경에서 특정한 이유로 무선 접속 반경을 넓혀야만 하는 경우가 종종 발생한다. 

※ 대표적으로 아파트에서 거실에 있는 유·무선공유기의 무선신호가 화장실등에 특정지역에서 너무 속도가 안나오는 상황!

 

인터넷 회선을 이미 공유해서, 하나의 유·무선공유기로 사용하고 있는데, 무선 접속 반경을 넓히는 방법은 두 가지가 있다.

1) 무선 신호를 중계해주는 Wireless Extender 등을 사용하는 방법

   - Wireless Extender, WiFi Range Extender, Wifi repeater 등의 이름으로 불리는 장비를 하나 사면 된다. 

   - 가격이 비싸지 않고, 손쉽게 무선 접속 반경을 늘릴 수 있다. 전기만 있으면 되므로, 아주 편리한 방법이다.

   - 무선 장치의 특성으로, 거리 제한이 있고 유선에 비해서 속도가 떨어지고 동시접속의 한계가 존재한다. (일반 개인의 가정에서는 신경쓸 필요가 없는 단점이다!)

※ 일반 가정의 경우에는 그냥 1번 방법을 추천한다. 2번은 소규모 사업장이나 정말 속도에 목매는 사람에게만 권장한다. 

2) 유선 연결이 가능한 또다른 공유기(구형 모델이더라도 가능)를 가지고 Dumb AP(또는  Bridged AP)로 만들어서, 유선과 무선 네트워크를 모두 확장하는 방법 

   - 집에서 놀고 있는 구형 공유기를 가지고, 네트워크를 공부할 수 있는 좋은 사례가 된다?!

   - 유선 네트워크와 무선 네트워크 둘 다를 확장할 수 있으며, 네트워크 속도가 단순 무선 확장방식(1번 방법)보다는 빠르다.

   - 유선이 연결되는 거리안에서 자유롭게 넓은 범위로 무선네트워크 반경을 확장할 수 있으며, 네트워크를 체계적으로 관리가 가능하다.(네트워크를 잘 아는 사람에게만 유리한 것이다.)

 

2번 경우를 가정하고, 기존에 운영하고 있는 유·무선공유기(이후 “메인 라우터”라고 지칭)이외에 구형의 OpenWRT가 설치된 유·무선공유기를 대상으로 작업하는 것을 설명한다.

 

0. 사전 준비

    - 최대한 최신 OpenWRT 펌웨어를 설치한 유·무선공유기를 준비한다.

    - Dumb AP(또는  Bridged AP)는 WAN 포트를 사용하지 않는다.

       ※ WAN 포트를 LAN 포트를 용도변경해서 사용할 수 있기도 하지만, 보통 4개 정도인 유선 LAN 포트가 사용하기에 충분하기에 굳이 어렵게 설정을 변경해서 WAN 포트를 사용하지 않아도 된다. 괜히 나중에 설정을 복구할때 헷갈릴 수도 있다!

    - 무선 네트워크 설정은 웹 UI에서 하는 것이 훨씬 편리하다.

    - 유선 네트워크 설정을 바꾸는 작업은 맨 마지막에 하며, 가능하면 SSH 접속을 이용해서 command line 명령으로 하는 것이 좋다.

    - 공유기의 LAN 포트와 작업하는 컴퓨터를 연결하고,(WAN은 절대 연결하지 않는다!) 공유기에 로그인 한다.

 

1. 무선 네트워크 설정

LUCI 기반의 웹 환경에서 로그인해서, 무선 네트워크를 먼저 설정한다. 메인라우터의 무선 설정과 동일하게 설정해도 되지만, 물리적인  주파수 채널은 다르게 해주는 것이 좋다.

 

2. LAN 영역에서 DHCP와 IPv6 비활성화 

Network → Interfaces 화면으로 가서 LAN interface 를 선택한다.

 “Ignore interface: Disable DHCP for this interface.” 항목을 찾아서, 체크 선택을 한다. 그리고 “IPv6 Settings” 탭으로 이동해서 모든 것을 “disabled”로 선택한다. IPv6 관련 기능은 아예 안쓰는 것으로 해야한다.

 

3. 방화벽과 DNSmasq, 그리고 odhcpd 비활성화

System → Startup 메뉴로 이동한 다음, Startup scripts 목록에 있는 firewall, dnsmasq, odhcpd을 disable 시킨다.

맨 아래에 있는 Save and Apply 버튼을 눌러서 적용시킨다.

 

4. 메인라우터와의 Bridged 네트워크를 설정

다시 Network → Interfaces 화면으로 가서 LAN interface 를 선택한다.

이제 유선 네트워크를 실제로 바꾸는 곳이다. 가능하면 SSH 상에서 Command line 명령이라, 설정파일 수정으로 하는 것이 좋지만,

어쪌 수 없다면, 웹 UI 상에서 “IPv4 address”는  메인라우터 IP 주소의 다음번으로 선정하는 것이 좋다. 예를 들어 OpenWRT 장비의 기본 IP 주소는 192.168.1.1 인데, 그대로 사용하고 있다면, 추가로 연결되는  Dump AP의 주소는 192.168.1.2 를 선정하는 것이 좋다. 해당 네트워크 대역의 마지막 IP 주소인 192.168.1.254도 괜찮은 선택이다.

Gateway는 메인라우터의 IP 주소, 일반적인 OpenWRT의 메인라우터를 그대로 쓰고 있다면, 위에 말한 바와 같이 192.168.1.1을 적는다.

Netmask는 대부분 255.255.255.0 로,

DNS는 국내 KT의 DNS IP 주소인 168.126.63.1 또는 국외 구글의 DNS IP 주소인 8.8.8.8 을 적어두면 된다. 우선순위는 바꾸어도 상관없다.

 

위의 4번 유선네트워크 설정 과정은 SSH 상에서 작업은 다음과 같이 설정파일을 직접 수정하여 빠르게 한꺼번에 할 수도 있지만,

설정파일 내용을 잘 이해하기 어려운 경우에는 권장하지 않는다.

 

4. 유선네트워크 설정(/etc/config/network)

/etc/config/network 파일에 들어가서, 아래와 같이  ipaddr, netmask, gateway, dns를 수정·추가해준다.

Dump AP의 IP 주소는 192.168.1.2 이고, 메인라우터의 IP 주소는 192.168.1.1 이다.

config interface 'lan'

           option type 'bridge'

           option ifname 'eth0.1'

           option proto 'static'

           option ipaddr '192.168.1.2'

           option netmask '255.255.255.0'

           option gateway '192.168.1.1'

           option dns '192.168.1.1'

           option ip6assign '60'

 

설정이 완료되었으면, 장비의 네트워크 서비스만을 재시작 하거나, 아니면 장비를 재부팅한다.

root@OpenWRT:~# /etc/init.d/network restart

 

또는

 

root@OpenWRT:~# reboot

 

이제 dump AP의 랜 포트중의 하나와 메인라우터의 랜 포트중의 하나를 랜선으로 연결해준다. 그러면 유선이든 무선이든 메인라우터에도 접근할 수 있고, 인터넷도 사용할 수 있다. Dump AP로의 접근은 앞에서 설정한  Dumb AP IP 주소로 쉽게 할 수 있다.

Posted by 훅크선장
, |

OpenWRT 18.06 버전에서 원격 관리 목적으로 SSH 포트를 하나 열어놓았더니, 온 세상에서 계속 로그인 시도를 합니다.

물론 당연히 패스워드 인증은 안하도록 설정되어 있지만, 그래도 너무 많은 시도가 있기에 그러한 무차별 대입 공격(Brute Force)를 어느정도 걸러내기 위하여, iptables 룰을 이용해보기도 하였습니다.

 

인터넷 검색을 통하면, 몇 개의 예제가 나오는데, iptables 버전이 업데이트 되면서, 몇 몇 키워드가 바뀌었습니다. 

특히 -m state, --state NEW 나 -m recent 옵션에서 에러가 나옵니다.

 

일단 -m recent 옵션을 쓰고 싶으면, kmod-ipt-conntrack-extra 와 iptables-mod-conntrack-extra 패키지가 설치되어 있어야 합니다.

다음, -m state 옵션은 -m conntrack 옵션으로 변경되었으며, --state 옵션은 --ctstate 옵션으로 이름이 변경되었습니다.

 

다음과 같은 방식으로 설정파일에 추가하면 됩니다.

※ 주의할 점은 외부에 포트를 열어주는 rule이 먼저 존재하고, 그 다음에 conntrack를 사용하는 rule 두 개를 추가해야 한다는 것입니다.

※ rule 중에서 연결을 ACCEPT 하는 유사한 설정이 두 개가 있다고 해서, 합쳐서 사용할 수 없습니다. 하나는 input 룰이고, 다른 하나는 forward 룰이기 때문인 것 같습니다. 둘이 합치게 되면, 그냥  forward 룰만 남기 때문에, input 룰이 없어서 아예 접속이 안됩니다.

 

config rule
        option target 'ACCEPT'
        option src 'wan'
        option dest_port '22'
        option name 'Allow-SSH'
        option proto 'tcp'

config rule
        option target 'ACCEPT'
        option src 'wan'
        option dest '*'
        option dest_port '22'
        option name 'SSH_CheckAccept'
        option proto 'tcp'
        option family 'ipv4'
        option extra '-m conntrack --ctstate NEW -m recent --set --name SSH --rsource'

config rule
        option src 'wan'
        option name 'SSH_CheckDrop'
        option family 'ipv4'
        option proto 'tcp'
        option dest '*'
        option dest_port '22'
        option target 'DROP'
        option extra '-m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 3 --name SSH --rttl --rsource'

 

위의 세 개 룰을 그대로 쓰셔도 됩니다. 만약  ssh 데몬 포트번호가 22번이 아니면, 그 포트번호만 고치면 바로 사용할 수 있습니다.

--name SSH 에서 SSH 라는 것은 룰셋의 이름으로 원하는 대로 바꿔서 쓰면 됩니다.

-seconds 60 --hitcount 3 부분이 중요한데, 이것은 60초 즉 1분 동안에 3번이상의 잘못된 로그인 시도가 이루어지면, 그 IP에서는 더이상 네트워크로 접근하지 못하도록 한다는 것입니다. 시간과 횟수를 잘 고려해서 설정하면 됩니다.

※ 요즘 SSH Brute Force의 양상을 보면, IP주소도 자주 바꾸고 로그인 시도도 꽤 긴 시간동안에 다시 하는 것 같아서, 설정시에 잘 고려해야 합니다. 제가 본 양상으로는 5분(300초)동안에 2번 이상의 잘못된 로그인 시도가 있으면, 바로 막는 것이 맞는 것 같았습니다.

 

참조 : https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/

 

Block SSH Brute Force Attacks with IPTables

Block ssh brute force attacks using some simple IPTables rules. This will rate-limit incoming SSH attacks and mitigate the brute force attack.

www.rackaid.com

Posted by 훅크선장
, |

https://medium.com/@cnnbysy/openwrt-18-06-1-%E9%85%8D%E7%BD%AE%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-30e231958c38

 

openwrt 18.06.1 配置科学上网 - Shuyi Yuan - Medium

openwrt 安装不缀述,网上教程很多,可以刷在路由器上、小主机上、甚至VirtualBox的虚拟机里。本文假定openwrt已经设置好并上网,电脑连接路由器LAN口。

medium.com

Openwrt 18.06.1 configuration on the science network

Shuyi Yuan
Shuyi Yuan
Follow
Oct 19, 2018 · 4 min read

Openwrt installation is not described, there are many online tutorials, you can brush on the router, small host, and even VirtualBox virtual machine. This article assumes that openwrt is already set up and connected to the Internet, and the computer is connected to the LAN port of the router.

1. Install the shadowsocks-libev related package
Opkg update 
(multiple runs a few times, I have encountered the shadowsocks related package after the first update)
Opkg install shadowsocks-libev-config shadowsocks-libev-ss-local shadowsocks-libev-ss-redir shadowsocks-libev-ss-rules shadowsocks-libev-ss-tunnel luci-app-shadowsocks-libev

2. Basic configuration
Go to the openwrt web configuration interface and select Service->shadowsocks-libev

Click Remote Servers, which has configured a server sss0 by default, modify the address, port, password, encryption mode, and most importantly, remove the disabled hook and click the save&apply button.

Click Local Instances, click the Disabled button corresponding to the ss-local.cfgXXXXX (XXX is a random number) entry, change it to Enabled, and click Save & Apply. After the configuration save takes effect, the running state of the ss-local.cfgXXXX entry changes from no to yes. At this point, a SOCKS5 server is running on the router, port 1080. Set the proxy server of the computer browser to the router address, port 1080, try to access Google. If successful, the ss client works fine on openwrt.

Next, test the function of iptables+ss-redir automatic forwarding proxy (transparent proxy). In Local Instances, set ss-redir.hi to Enabled. Click Redir Rules, Disabled to remove it, click on Destination Settings, and dst default is changed from bypass to forward. Click Save&Apply to make the configuration take effect. Cancel the proxy settings of the computer browser, visit Google, if successful, the unconditional transparent proxy settings are successful. All packets are forwarded by the router to the ss server.

3. Advanced configuration
The last configured transparent proxy forwards all traffic to the remote SS server, which is obviously a waste of traffic, and the efficiency of domestic websites going abroad is very low. Therefore, we need to identify domestic and foreign traffic on the router and treat it differently.

1. First set dst forward in Destination Settings to bypass.

2. Change the opkg list update from http to https, http is not updated, maybe GFW is a ghost
Opkg install libustream-mbedtls (if the prompt is not found, opkg update runs a few more times)
Sed -i s/http:/https:/g /etc/opkg/distfeeds.conf
Opkg update

3. Install various dependencies
Opkg remove dnsmasq
Opkg install dnsmasq-full
Opkg install coreutils-base64 curl ca-certificates ca-bundle

4.
==================
Too many steps are too annoying, write a one-click script, and execute it:
Cd /tmp && opkg update && opkg install curl ca-bundle && curl -s -L https://github.com/ysy/ss/raw/master/openwrt_tproxy.tgz -ot.tgz && tar x -z -f t .tgz && cd openwrt_tproxy && ./setup.sh

Posted by 훅크선장
, |

https://joybean.org/2018/02/14/configure-router-for-transparent-proxy-by-using-openwrt-and-shadowsocks/

 

https://xuri.me/2015/09/04/shadowsocks-redsocks2-and-chinadns-on-openwrt.html

 

ShadowSocks, RedSocks2 and ChinaDNS on OpenWrt

In this post, I will set up Shadowsocks, RedSocks2 and ChinaDNS on OpenWrt, install PandoraBox on Xiaomi MiWiFi Mini. ShadowSocks A secure socks5 proxy, designed to protect your Internet traffic. Server side setup reference ShadowSocks Setup Guide. Officia

xuri.me

 

OpenWrt Shadowsocks 安装&配置指南 – 轻巧冲浪

简介 本文先介绍了 OpenWrt Shadowsocks 及其配套软件的逻辑架构,然后详细说明了它们的安装、配置过程,最终实现国内 IP 直连,其余走代理的黑名单规则透明翻墙路由器。 提示:要使用 GFWList 白名单规则(即仅被 GFW 封锁的流量走代理),请参阅:《OpenWrt Shadowsocks GFWlist 配置教程》。博主推荐使用本文所述的 CHNRoutes 黑名单规则,能够避免部分 GFWList 遗漏的网站无法访问,并且加速外网访问速度(依赖 Shadowsocks Server

alalin.me

OpenWrt Shadowsocks Installation & Configuration Guide.txt
0.01MB
Openwrt 18.06.1 configuration science online.txt
0.00MB

https://alalin.me/archives/805

 

 

 

 

OpenWrt Shadowsocks 安装&配置指南 – 轻巧冲浪

简介 本文先介绍了 OpenWrt Shadowsocks 及其配套软件的逻辑架构,然后详细说明了它们的安装、配置过程,最终实现国内 IP 直连,其余走代理的黑名单规则透明翻墙路由器。 提示:要使用 GFWList 白名单规则(即仅被 GFW 封锁的流量走代理),请参阅:《OpenWrt Shadowsocks GFWlist 配置教程》。博主推荐使用本文所述的 CHNRoutes 黑名单规则,能够避免部分 GFWList 遗漏的网站无法访问,并且加速外网访问速度(依赖 Shadowsocks Server

alalin.me

https://medium.com/@cnnbysy/openwrt-18-06-1-%E9%85%8D%E7%BD%AE%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91-30e231958c38

 

openwrt 18.06.1 配置科学上网

openwrt 安装不缀述,网上教程很多,可以刷在路由器上、小主机上、甚至VirtualBox的虚拟机里。本文假定openwrt已经设置好并上网,电脑连接路由器LAN口。

medium.com

https://github.com/yuyang226/ContactsWidgetICS/wiki/Configuring-OpenWRT-Shadowsocks-on-Netgear-R8000

 

yuyang226/ContactsWidgetICS

a contacts widget for Android 4.0 ICS(Ice Cream Sandwich) - yuyang226/ContactsWidgetICS

github.com

 

Posted by 훅크선장
, |

1. VPN tun 디바이스 IP 알아내기

   .ovpn 설정파일에 있는 그대로,

   “redirect-gateway def1” 내용 그대로 두고 VPN에 접속

   

   접속한 다음, netstat -rn 명령으로, 현재 라우팅 테이블 확인

   VPN 클라이언트의 tun 디바이스의 IP 확인

   

   서버 설정과 관계가 있으면, 현재 우리 VPN 네트워크는 192.168.20.x 네트워크 사용중

   

   지금 현재 사용중인 맥북에서는 192.168.20.25 가 tun0 디바이스 IP 주소로 할당되고,

   VPN 서버측의 게이트웨이는 P2P 접속으로, 192.168.20.26 이라는  IP 주소를 가짐.


2. .ovpn 설정파일 수정

   VPN 설정파일에서

   “redirect-gateway def1” 라인을 제거

   

   대신

   route [VPN영역에붙은 네트워크 대역] 255.255.255.0 192.168.20.25

   을 추가


   ex) 10.1.1.0/24  네트워크가 VPN 영역 192.168.20.0/24 네트워크에 연결되어 있다면, (방화벽은 미리 서버측에서 이미 열어놓고 있는 상태여야만 함)

         route 10.1.1.0 255.255.255.0 192.168.20.25   라인을 생성해서, ovpn 파일에 추가하면 된다.



3. 다시 VPN 을 접속해서, 

   ping 192.168.20.1

   ping 10.1.1.1

   명령으로 라우팅이 정상임을 확인한 다음,


    ping www.centos.org 등으로 인터넷이 동작하는 것을 확인

    traceroute 명령 등으로, 현재 원래의 인터넷 라인으로 패킷이 나가는 것을 확인해도 됨.

Posted by 훅크선장
, |

OpenWRT 펌웨어를 설치할 수 있는 최적의 유무선공유기를 찾고 있는 중인데,


https://www.vegard.net/finding-best-router-openwrt-dd-wrt-lede/

라고 2017년 10월에 글을 쓴 노르웨이 사람이 있다는 사실을 알고,


그 모델들을 위주로 뒤져보기 시작했음.


 라는 노르웨이 사람은 일단 자기가 쓰고 있는 모델과 몇 개 고려대상을 잡았는데,


현재 사용중 : Asus RT-N66U

고려대상 제품들 :

                           NetGear R7000 또는 R7800

                           TP-Link Archer C7 (AC1750 이라고도 칭함), 또는 Archer C2600

                           Linksys WRT1900AC 또는 WRT1900ACS, 그리고 WRT3200ACM


위 제품들을 최신 OpenWRT/LEDE 펌웨어로 고려해보면, 모두 잘 지원되고 하드웨어 사양도 나쁘지 않은 편이나,

가장 문제가 가격과 출시시기이다.


NetGear Nighthawk X4S R7800 : 2016년 10월 출시, 현재 가격 국내최저가 22만원쯤(그나마 해외구입 제품)

NetGear Nighthawk R700 : 2014년 3월 출시, 현재 국내가격 18만9천원, 해외구매시 14만원쯤

Asus RT-N66U : 2013년 8월 출시, 해외구매가격 현재 5만3천원쯤

TP-Link Archer C7 : 2014년 2월 출시, 국내가격 현재 5만7천원쯤

TP-LINK Archer C2600 : 2016년 10월 출시, 해외구매로 최저가 약 16만원쯤

Linksys WRT1900ACS : 2016년 11월 출시, 해외구매로 최저가 약 21만원쯤

   ※ WRT1900AC 제품은 v1, v2, ACS 제품으로 구분되는데, 최신제품인 ACS만 확인했음. 

        국내에서는 특별히 구분할 필요가 없음. Amazon  에서는 가격차이가 좀 나는 편임.

Linksys WRT3200ACM : 2016년 11월 출시, 해외구매로 최저가 약 22만원쯤



유일하게 국내에서 구할 수 있고, 가성비가 좋은 제품은 TP-Link Archer C7 AC1750이 아직 최고인듯~!

하드웨어만 놓고 본다면, Linksys WRT3200ACM 제품을 한번 써보고 싶다는~!


Posted by 훅크선장
, |

https://wiki.openwrt.org/toh/tp-link/tl-wr841nd 

에서TFTP install/recovery via serial” 부분을 열심히 따라서 한 것입니다. 특별하게 다른 내용은 없지만, 한국에서 가장 많이 팔린? v11을 대상으로 한, 한글로 쓰여진 복구 매뉴얼로 생각하시면 됩니다.



OpenWRT 팀에서는 시리얼 포트를 이용한 복구보다는 tftp 기능을 이용한 복구를 권장하고 있는데, 일단 제 경우에는 펌웨어 업데이트중에 메모리 쓰기 에러가 발생해서, 단순 tftp 기능 복구는 실패하였습니다. 일단 먼저 tftp 기능 복구를 설명드리겠습니다. (제 경우는 실패하였지만...!!)



기존에 OpenWRT를 설치한 공유기에 경우에는,

1) Luci 웹 인터페이스에서 “system" 메뉴의 "Backup / Flash Firmware" 페이지에서 "Flash new Firmware image" 기능을 이용하거나,

2) SSH 로 공유기에 접근해서,

# cd /tmp

# wget https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr841-v11-squashfs-sysupgrade.bin

로 펌웨어를 인터넷에서 다운로드 받은 뒤,

# sysupgrade openwrt-ar71xx-generic-tl-wr841-v11-squashfs-sysupgrade.bin

명령으로 업그레이드가 가능합니다. 


제 경우는 위 2)번 방식 도중에 메모리 쓰기 에러가 난 후에, 계속 공유기가 재부팅을 반복하는 상황이었습니다.


이런 상황을 흔히 벽돌 (Brick) 상태라고 합니다.


첫번째로 시도해볼 방법은 tftp 기능을 이용한 복구입니다. 이 기능은 TP-Link 계열 공유기들이 거의 가지고 있는 것으로, 공유기가 failsafe 모드로 부팅하는 순간에 몇 초정도 tftp 클라이언트 기능을 동작시키고 복구용 펌웨어 다운로드를 찾으면서 대기하는 기능입니다.


1. 사용자 PC의 유선랜 네트워크 설정을 다음과 같이 합니다.

    IP Address : 192.168.0. 66

    Netmask : 255.255.255.0

    Gateway : 192.168.0.86

2. TFTPD 프로그램을 설치합니다. (이건 인터넷 검색하셔서, 설치하면 됩니다.)

     http://blog.pages.kr/486


3. TFTPD 데몬의 루트 디렉토리에 펌웨어 파일을 위치 시킵니다. 단, 펌웨어 파일명을 정확히 바꿔줘야 합니다.

    https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr841-v11-squashfs-factory.bin  라는 파일을 가져와서, 파일명을 꼭 정확히 wr841nv11_tp_recovery.bin 으로 바꾸어 줍니다.


4. 공유기의 LAN  포트중 하나에 랜선을 이용하여, PC와 연결합니다.


5. 공유기의 뒷면의 RESET 버튼을 누른 상태로, 공유기의 전원을 켭니다. 

    공유기가 리부팅될때까지 RESET 버튼을 누르고 있습니다. (공유기의 모든 LED가 꺼지고, 전원 LED만 다시 켜지는 상황)


6. 사용자 PC의 유선랜 네트워크를 DHCP로 변경하고, 192.168.1.x 네트워크에 가입된 것을 확인하고, http://192.168.1.1 로 접속해봅니다.



그러나, 제 경우에는 위 tftp 방식으로 실패했습니다. 

나중에 Serial 연결을 한 상태에서 보니, 펌웨어의 압축해제에서 계속 에러가 발생하는 것을 확인하였습니다. 

U-Boot 1.1.4 (Dec  1 2015 - 12:04:56)


ap143-2.0 - Honey Bee 2.0


DRAM:  32 MB

Flash Manuf Id 0xc8, DeviceId0 0x40, DeviceId1 0x16

flash size 4MB, sector count = 64

Flash:  4 MB

Using default environment


In:    serial

Out:   serial

Err:   serial

Net:   ath_gmac_enet_initialize...

ath_gmac_enet_initialize: reset mask:c02200 

Scorpion ---->S27 PHY*

S27 reg init

: cfg1 0x800c0000 cfg2 0x7114

eth0: ba:be:fa:ce:08:41

athrs27_phy_setup ATHR_PHY_CONTROL 4 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 4 :10

eth0 up

Honey Bee ---->  MAC 1 S27 PHY *

S27 reg init

ATHRS27: resetting s27

ATHRS27: s27 reset done

: cfg1 0x800c0000 cfg2 0x7214

eth1: ba:be:fa:ce:08:41

athrs27_phy_setup ATHR_PHY_CONTROL 0 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 0 :10

athrs27_phy_setup ATHR_PHY_CONTROL 1 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 1 :10

athrs27_phy_setup ATHR_PHY_CONTROL 2 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 2 :10

athrs27_phy_setup ATHR_PHY_CONTROL 3 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 3 :10

eth1 up

eth0, eth1

Setting 0x181162c0 to 0x5cb9a100

is_auto_upload_firmware=0

Autobooting in 1 seconds

## Booting image at 9f020000 ...

   Uncompressing Kernel Image ... ERROR: LzmaDecode.c, 543


Decoding error = 1

LZMA ERROR 1 - must RESET board to recoverˇ



그래서, 결국 Serial 포트를 이용한 벽돌상태에서 복구하기 (De-Brick)를 했습니다.


Serial 포트는 메인보드 상에 존재하기 때문에, 공유기의 분해 및 납땜이 필요합니다. 공유기 분해까지는 보통 사람들에게 어렵지 않지만, 문제는 메인보드상에 연결용 커넥터를 추가하는 납땜을 위해 납땜용 도구들이 필요하고, 게다가 컴퓨터와 Serial 포트를 연결하려면, 전용 USB to UART 연결보드(3.3v 용)가 필요합니다.  

주의하실 점이 UART 연결보드를 반드시 3.3v 용(아니면 겸용을 사서 3.3v 모드로)으로 써야합니다. 5v 용을 사서 쓰다가 큰 낭패(보드 칩 타 버림)를 볼 수 있습니다.


제 경우에는 아두이노 보드 연결용 UART 보드가 3.3v/5v 겸용이 있어서, 그것을 전원 선택 LED 표시가 되도록 개조해서 쓰고 있습니다.


그러면, 차례로 설명해 보겠습니다.


1) 공유기 분해


공유기 뒷면에서 안테나가 있는 쪽, 동그만 검정 고무 2개를 제거합니다. (헤어드라이어 열풍으로 살짝 가열하고 떼면 잘 떼어집니다.)

아래와 같이 나사가 두 개 나옵니다. 두 나사를 풀어줍니다.



그리고, 윗 부분과 아래 부분을 분리하면 됩니다. (모서리를 눌러서 틈이 벌어지면, 위 아래를 각각 힘으로 분리하면 됩니다.)



2) 메인보드상의 저항 제거 및 핀 경로 연결


아래 그림은 https://abload.de/img/841v12-board-serialumurl.jpg 에서 가져온 것입니다.


원래 R26 자리에 아주 작은 저항 한 개가 붙어 있고, R23에는 아무 것도 없습니다. 제조사가 사용하는 일종의 안전장치입니다. R26을 제거해서 단선시키고, R23을 연결해야만 Serial 접속이 가능합니다.

R26의 아주 작은 저항은 납땜기로 가열해서 제거할 수도 있는데, 과열에 의한 보드 손상이 있을 수 있으므로, 작은 니퍼를 이용해서 먼저 저항을 깬 다음, 납땜기로 나머지 남은 부분을 제거하는 것이 낫습니다.

R23의 연결은 저항을 쓸 수 있지만, 너무 작은 저항을 구하는 것도 납땜하는 것도 어렵기 때문에, 저는 전선의 코어 한 가닥을 길게 핀셋으로 잡고 납땜한 다음, 나머지 부분을 니퍼로 제거하는 방법을 썼습니다.

아래 그림을 자세히 보시면, R26은 단선되고, R23은 바로 연결된 것을 보실 수 있습니다. 반드시 테스터를 사용하여 단선과 연결을 확인하기 바랍니다. 육안으로는 잘 구분하기 어렵습니다. 실제로 작업에는 확대경이 필수입니다.

이 과정만 보더라도, 장비가 없는 사람에게 복구는 그림의 떡입니다.   




3) 공유기 메인보드에 연결용 커넥터 납땜


https://www.devicemart.co.kr/1313372

Female to Female 점퍼와이어와 

https://www.devicemart.co.kr/35988

12mm 기본 핀 헤더가 있는 것이 좋습니다. 보드에 선을 그냥 납땜할 수도 있습니다만, 핀헤더와 연결 커넥터를 사용하는 것을 권장합니다. (실수를 줄이고, 깔끔하거든요~!)


아래와 같이, 4개 핀 헤더를 보드에 납땜하면 됩니다. 





4) USB to UART 설치 및 Serial 과 연결


제 경우에는 다음 그림에 있는 큰 형태의 USB to UART(5v / 3.3v 겸용 제품)를 사용했습니다.



https://www.devicemart.co.kr/1290042

FTDI사 FT232RL 칩셋을 사용하는 범용을 사서 쓰는 것이 좋습니다. 5V와 3.3V 를 점퍼선으로 변환해서 사용할 수 있어서 좋습니다.

FTDI 사의 드라이버는 여기서 받아서 쓸 수 있습니다.

http://www.ftdichip.com/Drivers/VCP.htm


USB to UART 보드와 메인보드 핀 헤더를 연결하는 방법은 단지 세 개만 연결하면 됩니다. 절대로 Vcc 선을 연결하지 마시기 바랍니다. (공유기 메인보드 칩 아니면, UART 보드의 칩이 타버릴 수 있습니다.)

연결한 선은 다음과 같이 합니다. (점퍼선 연결이 편리합니다~!)

USB to UART 보드    <<----------------->>   공유기 메인보드 핀헤더 

                      Vcc           xx 연결 안함 xx           Vcc

                     GND       <----------------->     GND

                      TX         <----------------->      RX

                      RX         <----------------->      TX



5) PC에서 터미널 에뮬레이터로 Serial 연결 

    가장 일반적인 터미널 에뮬레이터는 Putty 입니다. 

    Putty 에서 USB to UART 보드의 COM 포트 번호를 지정하고, Speed는 115200로 설정하면 됩니다.


Putty 설치와 사용에 대해서는 인터넷 검색하시면, 다음과 같은 참고 페이지들이 많이 나올겁니다.

http://zelkun.tistory.com/entry/009-Arduino-%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8-PuTTY-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%8B%9C%EB%A6%AC%EC%96%BC-%ED%86%B5%EC%8B%A0



6) 공유기 부팅해서, 상태 확인하기

모든 것이 다 정상이라면, 공유기의 전원을 켰을 때,  PC의 터미널 에뮬레이터 화면에는 다음과 같은 메시지가 출력될 것입니다. (앞 부분 글자가 조금 잘리는 경우도 많습니다. 정상적인 텍스트 출력이 중요합니다.)


U-Boot 1.1.4 (Dec  1 2015 - 12:04:56)


ap143-2.0 - Honey Bee 2.0


DRAM:  32 MB

Flash Manuf Id 0xc8, DeviceId0 0x40, DeviceId1 0x16

flash size 4MB, sector count = 64

Flash:  4 MB

Using default environment


In:    serial

Out:   serial

Err:   serial

Net:   ath_gmac_enet_initialize...

ath_gmac_enet_initialize: reset mask:c02200 

Scorpion ---->S27 PHY*

S27 reg init

: cfg1 0x800c0000 cfg2 0x7114

eth0: ba:be:fa:ce:08:41

athrs27_phy_setup ATHR_PHY_CONTROL 4 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 4 :10

eth0 up

Honey Bee ---->  MAC 1 S27 PHY *

S27 reg init

ATHRS27: resetting s27

ATHRS27: s27 reset done

: cfg1 0x800c0000 cfg2 0x7214

eth1: ba:be:fa:ce:08:41

athrs27_phy_setup ATHR_PHY_CONTROL 0 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 0 :10

athrs27_phy_setup ATHR_PHY_CONTROL 1 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 1 :10

athrs27_phy_setup ATHR_PHY_CONTROL 2 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 2 :10

athrs27_phy_setup ATHR_PHY_CONTROL 3 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 3 :10

eth1 up

eth0, eth1

Setting 0x181162c0 to 0x5cb9a100

is_auto_upload_firmware=0

Autobooting in 1 seconds

## Booting image at 9f020000 ...

   Uncompressing Kernel Image ... ERROR: LzmaDecode.c, 543


Decoding error = 1

LZMA ERROR 1 - must RESET board to recoverˇ


만약, 위와 같은 메시지가 나오지 않는다면, 앞에서 과정을 다시 확인하시기 바랍니다.



7) Serial 연결상태에서 펌웨어 다운받고, 업데이트하기


먼저 tftp 복구 환경을 앞에서와 같이 설정 합니다.

그 다음, 공유기를 켭니다. 공유기에서 Autobooting in 1 seconds 메시지가 보이자마자, tpl 이라고 영문 세글자를 입력 합니다.

그러면, 쉘 명령어 상태가 됩니다.  ap143-2.0> 라는 프롬프트가 뜰 것입니다.


ap143-2.0> printenv

명령어로 현재 상태를 확인하고,


ap143-2.0> setenv ipaddr 192.168.0.86

ap143-2.0> setenv serverip 192.168.0.66


을 설정한 다음, (tftp 서비스 설정할때의 값을 사용하는데, 여기 IP 주소들은 공유기 입장에서 사용하는 것입니다.)


ap143-2.0> tftpboot 0x80000000 wr841nv11_tp_recovery.bin


로 펌웨어를 다운로드 받습니다.


enet0 port4 up

Using eth0 device

TFTP from server 192.168.0.66; our IP address is 192.168.0.86

Filename 'wr841nv11_tp_recovery.bin'.

Load address: 0x80000000

Loading: *.#################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. ######################################################

done

Bytes transferred = 3932160 (3c0000 hex)


와 같이 정상적으로 펌웨어가 tftp로 전송 완료되었으면, (전송완료된 데이터의 hex 길이는 반드시 기억해줘야 합니다. 명령어에서 계속 사용하는 값이 됩니다. 절대로 틀리면 안되는 값입니다.)


ap143-2.0> printenv bootcmdbootcmd=bootm 0x9f020000

ap143-2.0> erase 0x9f020000 +0x3c0000


부팅 파라미터를 설정하고, 펌웨어가 들어갈 메모리 영역을 먼저 지워줍니다.


Erasing flash... 

First 0x2 last 0x3d sector size 0x10000

....   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....  31....  32....  33....  34....  35....  36....  37....  38....  39....  40....  41....  42....  43....  44....  45....  46....  47....  48....  49....  50....  51....  52....  53....  54....  55....  56....  57....  58....  59....  60....  61

Erased 60 sectors


메모리가 정상적으로 지워지면, 펌웨어를 메모리 영역에 덮어씁니다.


ap143-2.0> cp.b 0x80000000 0x9f020000 0x3c0000


Copy to Flash... write addr: 9f020000

done


모든 것이 완료되었으면, 공유기를 재부팅합니다.


ap143-2.0> reset


그러면, 정상적으로 부팅되는 로그를 보실 수 있습니다. 

http://192.168.1.1 로 접속해서, 공유기를 설정하면 됩니다.



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


※ 전체과정 화면 캡쳐 (참고용)

tftp 상황에서 retry 과정이 여러번 있었습니다. 한번에 성공하지 못하더라도 tftp 환경만 정상적이면, 공유기를 재부팅해서 계속 시도할 수 있습니다. 


 U-Boot 1.1.4 (Dec  1 2015 - 12:04:56)


ap143-2.0 - Honey Bee 2.0


DRAM:  32 MB

Flash Manuf Id 0xc8, DeviceId0 0x40, DeviceId1 0x16

flash size 4MB, sector count = 64

Flash:  4 MB

Using default environment


In:    serial

Out:   serial

Err:   serial

Net:   ath_gmac_enet_initialize...

ath_gmac_enet_initialize: reset mask:c02200 

Scorpion ---->S27 PHY*

S27 reg init

: cfg1 0x800c0000 cfg2 0x7114

eth0: ba:be:fa:ce:08:41

athrs27_phy_setup ATHR_PHY_CONTROL 4 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 4 :10

eth0 up

Honey Bee ---->  MAC 1 S27 PHY *

S27 reg init

ATHRS27: resetting s27

ATHRS27: s27 reset done

: cfg1 0x800c0000 cfg2 0x7214

eth1: ba:be:fa:ce:08:41

athrs27_phy_setup ATHR_PHY_CONTROL 0 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 0 :10

athrs27_phy_setup ATHR_PHY_CONTROL 1 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 1 :10

athrs27_phy_setup ATHR_PHY_CONTROL 2 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 2 :10

athrs27_phy_setup ATHR_PHY_CONTROL 3 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 3 :10

eth1 up

eth0, eth1

Setting 0x181162c0 to 0x5cb9a100

is_auto_upload_firmware=0

Autobooting in 1 seconds

ap143-2.0> ap143-2.0> ap143-2.0> ap143-2.0> setenv ipaddr ROUTERIPap143-2.0> setenv serverip SERVERIPap143-2.0> printenvbootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:32k(u-boot1),32k(u-boot2),3008k(rootfs),896k(uImage),64k(mib0),64k(ART)

bootcmd=bootm 0x9f020000

bootdelay=1

baudrate=115200

ethaddr=0xba:0xbe:0xfa:0xce:0x08:0x41

dir=

lu=tftp 0x80060000 ${dir}tuboot.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesize

lf=tftp 0x80060000 ${dir}ap143-2.0${bc}-jffs2&&erase 0x9f010000 +$filesize&&cp.b $fileaddr 0x9f010000 $filesize

lk=tftp 0x80060000 ${dir}vmlinux${bc}.lzma.uImage&&erase 0x9f300000 +$filesize&&cp.b $fileaddr 0x9f300000 $filesize

stdin=serial

stdout=serial

stderr=serial

ethact=eth0

ipaddr=ROUTERIP

serverip=SERVERIP


Environment size: 677/65532 bytes

ap143-2.0> ser. .tUsage:

setenv  - set environment variables


ap143-2.0> setenv ipd. .addr 192.168.1.. .. .0.86ap143-2.0> setenv serverip 192.168.0.66ap143-2.0> printenvbootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:32k(u-boot1),32k(u-boot2),3008k(rootfs),896k(uImage),64k(mib0),64k(ART)

bootcmd=bootm 0x9f020000

bootdelay=1

baudrate=115200

ethaddr=0xba:0xbe:0xfa:0xce:0x08:0x41

dir=

lu=tftp 0x80060000 ${dir}tuboot.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesize

lf=tftp 0x80060000 ${dir}ap143-2.0${bc}-jffs2&&erase 0x9f010000 +$filesize&&cp.b $fileaddr 0x9f010000 $filesize

lk=tftp 0x80060000 ${dir}vmlinux${bc}.lzma.uImage&&erase 0x9f300000 +$filesize&&cp.b $fileaddr 0x9f300000 $filesize

stdin=serial

stdout=serial

stderr=serial

ethact=eth0

ipaddr=192.168.0.86

serverip=192.168.0.66


Environment size: 685/65532 bytes

ap143-2.0> tftpboot 0x80000000 o. .wr841nv11_tp_recovery.bineth1 link down

enet0 port4 up

dup 1 speed 100

Using eth0 device

TFTP from server 192.168.0.66; our IP address is 192.168.0.86

Filename 'wr841nv11_tp_recovery.bin'.

Load address: 0x80000000

Loading: *.T T T 

Retry count exceeded; starting again

eth1 link down

Using eth0 device

TFTP from server 192.168.0.66; our IP address is 192.168.0.86

Filename 'wr841nv11_tp_recovery.bin'.

Load address: 0x80000000

Loading: *.T T T 

Retry count exceeded; starting again

enet1 port3 up

dup 1 speed 1000

Using eth1 device

TFTP from server 192.168.0.66; our IP address is 192.168.0.86

Filename 'wr841nv11_tp_recovery.bin'.

Load address: 0x80000000

Loading: *.T T T 

Retry count exceeded; starting again

enet0 port4 down

eth0 link down

Using eth1 device

TFTP from server 192.168.0.66; our IP address is 192.168.0.86

Filename 'wr841nv11_tp_recovery.bin'.

Load address: 0x80000000

Loading: *.T T T 

Retry count exceeded; starting again

enet0 port4 up

Using eth0 device

TFTP from server 192.168.0.66; our IP address is 192.168.0.86

Filename 'wr841nv11_tp_recovery.bin'.

Load address: 0x80000000

Loading: *.#################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. #################################################################

. ######################################################

done

Bytes transferred = 3932160 (3c0000 hex)

ap143-2.0> printenv bootcmdbootcmd=bootm 0x9f020000

ap143-2.0> erase 0x9f020000 +0x3c0000Erasing flash... 

First 0x2 last 0x3d sector size 0x10000

....   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....  31....  32....  33....  34....  35....  36....  37....  38....  39....  40....  41....  42....  43....  44....  45....  46....  47....  48....  49....  50....  51....  52....  53....  54....  55....  56....  57....  58....  59....  60....  61

Erased 60 sectors

ap143-2.0> cp.b 0x80000000 0x9f020000 0x3c0000Copy to Flash... write addr: 9f020000

done

ap143-2.0> reset



<----- 재부팅되고서....------->



vironment


In:    serial

Out:   serial

Err:   serial

Net:   ath_gmac_enet_initialize...

ath_gmac_enet_initialize: reset mask:c02200 

Scorpion ---->S27 PHY*

S27 reg init

: cfg1 0x800c0000 cfg2 0x7114

eth0: ba:be:fa:ce:08:41

athrs27_phy_setup ATHR_PHY_CONTROL 4 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 4 :10

eth0 up

Honey Bee ---->  MAC 1 S27 PHY *

S27 reg init

ATHRS27: resetting s27

ATHRS27: s27 reset done

: cfg1 0x800c0000 cfg2 0x7214

eth1: ba:be:fa:ce:08:41

athrs27_phy_setup ATHR_PHY_CONTROL 0 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 0 :10

athrs27_phy_setup ATHR_PHY_CONTROL 1 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 1 :10

athrs27_phy_setup ATHR_PHY_CONTROL 2 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 2 :10

athrs27_phy_setup ATHR_PHY_CONTROL 3 :1000

athrs27_phy_setup ATHR_PHY_SPEC_STAUS 3 :10

eth1 up

eth0, eth1

Setting 0x181162c0 to 0x5cb9a100

is_auto_upload_firmware=0

Autobooting in 1 seconds

## Booting image at 9f020000 ...

   Uncompressing Kernel Image ... OK


Starting kernel ...


[    0.000000] Linux version 3.18.23 (buildbot@builder1) (gcc version 4.8.3 (OpenWrt/Linaro GCC 4.8-2014.04 r47269) ) #1 Sun Jan 31 18:39:35 CET 2016

[    0.000000] bootconsole [early0] enabled

[    0.000000] CPU0 revision is: 00019374 (MIPS 24Kc)

[    0.000000] SoC: Qualcomm Atheros QCA9533 ver 2 rev 0

[    0.000000] Determined physical RAM map:

[    0.000000]  memory: 02000000 @ 00000000 (usable)

[    0.000000] Initrd not found or empty - disabling initrd

[    0.000000] Zone ranges:

[    0.000000]   Normal   [mem 0x00000000-0x01ffffff]

[    0.000000] Movable zone start for each node

[    0.000000] Early memory node ranges

[    0.000000]   node   0: [mem 0x00000000-0x01ffffff]

[    0.000000] Initmem setup node 0 [mem 0x00000000-0x01ffffff]

[    0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.

[    0.000000] Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes

[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128

[    0.000000] Kernel command line:  board=TL-WR841N-v9  console=ttyS0,115200 rootfstype=squashfs,jffs2 noinitrd

[    0.000000] PID hash table entries: 128 (order: -3, 512 bytes)

[    0.000000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)

[    0.000000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)

[    0.000000] Writing ErrCtl register=00000000

[    0.000000] Readback ErrCtl register=00000000

[    0.000000] Memory: 28324K/32768K available (2586K kernel code, 128K rwdata, 540K rodata, 256K init, 193K bss, 4444K reserved)

[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1

[    0.000000] NR_IRQS:51

[    0.000000] Clocks: CPU:650.000MHz, DDR:392.724MHz, AHB:216.666MHz, Ref:25.000MHz

[    0.000000] Calibrating delay loop... 432.53 BogoMIPS (lpj=2162688)

[    0.060000] pid_max: default: 32768 minimum: 301

[    0.060000] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)

[    0.070000] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)

[    0.080000] NET: Registered protocol family 16

[    0.080000] MIPS: machine is TP-LINK TL-WR841N/ND v9

[    0.540000] Switched to clocksource MIPS

[    0.540000] NET: Registered protocol family 2

[    0.550000] TCP established hash table entries: 1024 (order: 0, 4096 bytes)

[    0.550000] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)

[    0.560000] TCP: Hash tables configured (established 1024 bind 1024)

[    0.560000] TCP: reno registered

[    0.570000] UDP hash table entries: 256 (order: 0, 4096 bytes)

[    0.570000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)

[    0.580000] NET: Registered protocol family 1

[    0.580000] futex hash table entries: 256 (order: -1, 3072 bytes)

[    0.600000] squashfs: version 4.0 (2009/01/31) Phillip Lougher

[    0.600000] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.

[    0.610000] msgmni has been set to 55

[    0.620000] io scheduler noop registered

[    0.620000] io scheduler deadline registered (default)

[    0.630000] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled

[    0.640000] console [ttyS0] disabled

�[    0.660000] serial8250.0: ttyS0 at MMIO 0x18020000 (irq = 11, base_baud = 1562500) is a 16550A

[    0.670000] console [ttyS0] enabled

[    0.670000] console [ttyS0] enabled

[    0.670000] bootconsole [early0] disabled

[    0.670000] bootconsole [early0] disabled

[    0.680000] m25p80 spi0.0: found gd25q32, expected m25p80

[    0.690000] m25p80 spi0.0: gd25q32 (4096 Kbytes)

[    0.700000] 5 tp-link partitions found on MTD device spi0.0

[    0.700000] Creating 5 MTD partitions on "spi0.0":

[    0.710000] 0x000000000000-0x000000020000 : "u-boot"

[    0.710000] 0x000000020000-0x00000013f620 : "kernel"

[    0.720000] 0x00000013f620-0x0000003f0000 : "rootfs"

[    0.720000] mtd: device 2 (rootfs) set to be root filesystem

[    0.730000] 1 squashfs-split partitions found on MTD device rootfs

[    0.740000] 0x000000360000-0x0000003f0000 : "rootfs_data"

[    0.740000] 0x0000003f0000-0x000000400000 : "art"

[    0.750000] 0x000000020000-0x0000003f0000 : "firmware"

[    0.790000] libphy: ag71xx_mdio: probed

[    1.380000] ag71xx-mdio.1: Found an AR934X built-in switch

[    1.420000] eth0: Atheros AG71xx at 0xba000000, irq 5, mode:GMII

[    2.020000] ag71xx ag71xx.0: connected to PHY at ag71xx-mdio.1:04 [uid=004dd042, driver=Generic PHY]

[    2.030000] eth1: Atheros AG71xx at 0xb9000000, irq 4, mode:MII

[    2.040000] TCP: cubic registered

[    2.040000] NET: Registered protocol family 17

[    2.040000] bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter if you need this.

[    2.060000] Bridge firewalling registered

[    2.060000] 8021q: 802.1Q VLAN Support v1.8

[    2.070000] VFS: Mounted root (squashfs filesystem) readonly on device 31:2.

[    2.080000] Freeing unused kernel memory: 256K (80390000 - 803d0000)

[    3.080000] init: Console is alive

[    3.090000] init: - watchdog -

[    5.120000] init: - preinit -

[    5.670000] random: procd urandom read with 8 bits of entropy available

Press the [f] key and hit [enter] to enter failsafe mode

Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level

[    8.870000] mount_root: jffs2 not ready yet, using temporary tmpfs overlay

[    8.920000] procd: - early -

[    8.920000] procd: - watchdog -

[    9.660000] procd: - ubus -

[   10.680000] procd: - init -

Please press Enter to activate this console.

[   11.490000] NET: Registered protocol family 10

[   11.500000] ip6_tables: (C) 2000-2006 Netfilter Core Team

[   11.520000] Loading modules backported from Linux version master-2015-03-09-0-g141f155

[   11.530000] Backport generated by backports.git backports-20150129-0-gdd4a670

[   11.540000] ip_tables: (C) 2000-2006 Netfilter Core Team

[   11.550000] nf_conntrack version 0.5.0 (446 buckets, 1784 max)

[   11.600000] xt_time: kernel timezone is -0000

[   11.630000] cfg80211: Calling CRDA to update world regulatory domain

[   11.660000] cfg80211: World regulatory domain updated:

[   11.660000] cfg80211:  DFS Master region: unset

[   11.670000] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)

[   11.680000] cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A)

[   11.680000] cfg80211:   (2457000 KHz - 2482000 KHz @ 20000 KHz, 92000 KHz AUTO), (N/A, 2000 mBm), (N/A)

[   11.690000] cfg80211:   (2474000 KHz - 2494000 KHz @ 20000 KHz), (N/A, 2000 mBm), (N/A)

[   11.700000] cfg80211:   (5170000 KHz - 5250000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000 mBm), (N/A)

[   11.710000] cfg80211:   (5250000 KHz - 5330000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000 mBm), (0 s)

[   11.720000] cfg80211:   (5490000 KHz - 5730000 KHz @ 160000 KHz), (N/A, 2000 mBm), (0 s)

[   11.730000] cfg80211:   (5735000 KHz - 5835000 KHz @ 80000 KHz), (N/A, 2000 mBm), (N/A)

[   11.740000] cfg80211:   (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 0 mBm), (N/A)

[   11.800000] PPP generic driver version 2.4.2

[   11.810000] NET: Registered protocol family 24

[   11.880000] ieee80211 phy0: Atheros AR9531 Rev:2 mem=0xb8100000, irq=2

[   11.890000] cfg80211: Calling CRDA for country: US

[   11.910000] cfg80211: Regulatory domain changed to country: US

[   11.910000] cfg80211:  DFS Master region: FCC

[   11.920000] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)

[   11.930000] cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (N/A, 3000 mBm), (N/A)

[   11.930000] cfg80211:   (5170000 KHz - 5250000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2300 mBm), (N/A)

[   11.940000] cfg80211:   (5250000 KHz - 5330000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2300 mBm), (0 s)

[   11.950000] cfg80211:   (5490000 KHz - 5730000 KHz @ 160000 KHz), (N/A, 2300 mBm), (0 s)

[   11.960000] cfg80211:   (5735000 KHz - 5835000 KHz @ 80000 KHz), (N/A, 3000 mBm), (N/A)

[   11.970000] cfg80211:   (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 4000 mBm), (N/A)

[   19.320000] jffs2_scan_eraseblock(): End of filesystem marker found at 0x0

[   19.330000] jffs2_build_filesystem(): unlocking the mtd device... done.

[   19.340000] jffs2_build_filesystem(): erasing all blocks after the end marker... done.

[   20.730000] jffs2: notice: (985) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.

[   21.510000] device eth0 entered promiscuous mode

[   21.510000] IPv6: ADDRCONF(NETDEV_UP): br-lan: link is not ready

[   21.610000] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready

[   26.300000] eth1: link up (100Mbps/Full duplex)

[   26.330000] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready


Posted by 훅크선장
, |

라즈베리 파이에서 유선랜 라우터 만들기


0. 라즈베리 파이에 라즈베리안 설치하고, 부팅한 다음, 기본 설정 해줍니다.

$ sudo raspi-config

명령을 실행하고, 다음의 작업을 실시


Expand the root filesystem and reboot

Boot to commandline, not to GUI

Configure the right keyboard map and timezone

Configure the Memory Split to give 16Mb (the minimum) to the GPU

Consider overclocking to the Medium (900MHz) setting on Pi 1, or High (1000MHz) setting on Pi 2



$ sudo su -

명령으로 root 권한에서 작업하는 것이 편하다.


1. 당연히 USB 유선랜 어댑터가 인식되어야 하겠지요?!

# ifconfig -a

에서 eth1 이 있어야죠


2. /etc/network/interfaces 파일에서 eth1에 정적 아이피 주소 설정하기

※ 이미 eth0는 게이트웨이 인터페이스로 dhcp 설정이거나, 아니면 static IP 주소를 설정했다고 가정 


allow-hotplug eth1

iface eth1 inet static

  address 192.168.144.1

  network 192.168.144.0

  

hotplug가 필요한지 의문이긴 한데,  eth1에 정적인 아이피 주소와 네트워크 대역만 설정


3. eth1 이 eth0 게이트웨이를 이용해서 패킷이 나갈 수 있도록, 포워딩 설정이 필요


패킷 포워딩은 커널 파라미터 설정 명령 하나와 Net Filter인 iptables 명령어 3개로 구성

1) 포워딩 설정

# echo 1 > /proc/sys/net/ipv4/ip_forward

하고,

/etc/sysctl.conf 에서 포워딩 라인을 언코멘트(맨앞의 # 글자 삭제)한다.


# Uncomment the next line to enable packet forwarding for IPv4

net.ipv4.ip_forward=1


파일 수정을 완료한 다음에, # sysctl –system 명령으로 시스템에 적용할 수도 있다.


2) Net Filter 설정 


# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT


세 개의 명령을 재부팅에서도 동일하게 가지고 가려면, 두가지 방법이 있다.

먼저, 쉡 스크립트로 매번 재부팅때마다 실행 


현재 Net Filter 설정을 파일로 저장 

# iptables-save > /etc/iptables.ipv4.nat 


그리고,  /etc/network/interfaces 파일에 다음의 구문을 추가한다.


up iptables-restore < /etc/iptables.ipv4.nat


Net Filter 설정 구문을 rc.local 파일에 추가해서 실행하는 방법도 있다.

/etc/rc.local 파일 맨 마지막에 


/sbin/iptables-restore < /etc/iptables.ipv4.nat

를 추가.


스크립트 방식이 미덥지 않으시면, 대안으로,

두번째, 별도 패키지 설치


# apt-get install iptables-persistent

The installer will ask if you want to save current rules, select Yes

설치할 때, 현재 룰을 저장할꺼냐고 물어보면 “Yes”를 선택,

만약 나중에 별도로 룰을 저장하고 싶으면,  # netfilter-persistent save  하면 된다능.


매번 부팅할때, 설정이 다시 동작하도록 하려면,

# systemctl enable netfilter-persistent

로 마무리.


4. DHCP 서버 설치와 설정 


apt-get install isc-dhcp-server


/etc/default/isc-dhcp-server  파일에서 dhcp가 동작할 인터페이스 설정


INTERFACES="eth1"

으로 설정


/etc/dhcp/dhcpd.conf  에서 서브도메인 설정


#option domain-name "example.org";

#option domain-name-servers ns1.example.org, ns2.example.org;


위 두 라인을 커맨트 처리 (맨 앞에 # 글자 삽입)


dhcp로 할당될 IP 주소들 범위를 정의,

다음과 같이 추가


subnet 192.168.144.0 netmask 255.255.255.0 { 

  range 192.168.144.100 192.168.144.200;

  option domain-name-servers 192.168.137.1;

  option domain-name "internal.example.org";

  option routers 192.168.144.1;

  option broadcast-address 192.168.144.255;

  default-lease-time 600;

  max-lease-time 7200;

}


subnet 은 eth1에 할당한 네트워크와 동일하게 하고, range는 dhcp로 할당할 아이피 대역을 정의

도메인 네임 서버는 eth0에 연결된 실제 인터넷 DNS 아이피를 써주면 되고, 라우터 아이피는 라즈베리파이의 eth1 인터페이스 아이피 주소를 쓰면 됩니다.


만약에 도메인 네임서버를 쓰는 곳에서, eth0 게이트웨이가 연결된 곳이 DHCP로 IP를 받는다면, dnsmasq 패키지를 설치해서, 현재의 리눅스 머신, 라즈베리파이가 DNS 쿼리를 상위로 던져서 처리할 수 있도록 할 수 있습니다.

option domain-name-servers 192.168.144.1

도메인 서버를 현재 머신의 아이피 eth1 의 IP로 설정하시고,

# apt-get install dnsmasq

하면 됩니다.


서버가 잘 실행되면,

# update-rc.d isc-dhcp-server enable 

명령으로 항상 시스템 부팅때, 서비스가 실행되도록 설정한다.


5. eth1 쪽에 노트북 같은 것을 붙여서, dhcp 로 아이피 잘 받아오는지?  외부로 ping 이 잘 가는지?, 그리고 인터넷이 되는 지를 검사한다.

아이피가 안 받아지면, dhcpd 설정 문제이거나, eth1 쪽 인터페이스 네트워크 설정에 문제가 있는 것이고,

인터넷만 안된다면, dns 설정문제일 가능성이 높다.

안되는 경우에는 네트워크 설정을 하나씩 짚어보면서, 체크할 것.


dhcpd 의 에러상태를 보고 싶다면, 

# systemctl status isc-dhcp-server 로 볼 수 있다.


간혹 게이트웨이들이 ping을 받지 않을 수 있기 때문에, 나는 ping 던지는 대상은 항상 www.centos.org 같은 도메인으로 하거나, 기존에 ping을 잘 받는 네트워크 장비나 리눅스 머신에게만 쏜다~!



------ 현재 작업중인 내용 -------


1. dnsmasq 를 사용한다면, 굳이 isc-dhcp-server을 쓰지 않아도 된다.  dnsmasq 는 dhcp 서버 기능을 가지고 있기 때문이다.

2. hostapd 를 설치하면, wifi 어댑터를  무선 AP(Access Point)로 사용할 수 있다.  eth1 인터페이스가 wlan0 인터페이스로 바뀌는 것 말고, 위 내용에서 달라질 것은 크게 없다. hostapd 에서 무선접속 설정은 반드시 해야 한다.

3. 흔히 집에서 쓰는, 유무선공유기 (Home Router)와 같이 유선과 무선이 동일한 IP 대역을 가지고 자유롭고 연결되는 네트워크 환경을 만들고 싶다면, bridge 기술을 사용해서(bridge-utils 패키지를 설치), 두 개 이상의 네트워크 인터페이스를 통합하면 좋다.  

※ Bridge 기술을 안쓰면, Net Filter 정의가 많이 복잡해질 것이다. iptables 명령어를 엄청 많이 고민해서 넣어야 할 지도 모른다. 그래서, Bridge 기술이 좋은게 좋은거다~!



Posted by 훅크선장
, |

최근 유무선공유기 펌웨어 업데이트를 다시 해보니,

펌웨어 업데이트에서 가장 좋은 방법은 TFTP를 이용하는 방법이다.

왜냐하면, 네트워크상에서 바로 펌웨어를 공유기에 주입할 수 있기 때문이다. 기존에 설치된 펌웨어의 웹 인터페이스에서 업그레이드를 하려고 하면, 반드시 펌웨어의 버전 검사나 기타 검사에 의해서 펌웨어를 안 받아들이는 경우가 많기 때문에.(모든 공유기 회사의 번들 펌웨어도 그렇고, DD-WRT도 그렇고,  OpenWRT라고 다르지 않다.)



그래서, 맥(Mac OS X)에서 TFTP 서버를 구동시키고, 펌웨어를 TFTP로 전달하면 된다.


참고한 사이트는 http://www.barryodonovan.com/2014/11/08/os-x-built-in-tftp-server 이다. 


맥에서 터미널을 하나 열고,


# sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist

# sudo launchctl start com.apple.tftpd


이러면, TFTP 서버가 가동된다.


펌웨어는 /private/tftpboot/ 에 넣어주면 된다. 여기가 TFTP 서버의 root directory이다.


# cd /private/tftpboot

# sudo cp ~/Download/new_firmware.bin ./


이렇게 해서, 네트워크를 TFTP 용으로 설정하고, 공유기의 펌웨어를 업데이트를 진행하면 된다.

각각 공유기 회사마다 TFTP용 네트워크 설정이 따로 있으니, 이건 각 회사 매뉴얼을 참고하면 된다.

openwrt.org에 가면, 왠만한 공유기의 정보는 다 있으니, 거기도 참고할 만하다.


이미 가동된 TFTP서버를 정지하려면,


# sudo launchctl unload -F /System/Library/LaunchDaemons/tftp.plist


이 명령어 하나면 된다.


Posted by 훅크선장
, |

이전에 썼던 글에서, OpenWRT에서 OpenVPN 사용을 위한 방화벽 iptables 허용 규칙


방화벽 규칙을 iptables 가 아닌, netfilter로 사용하는 방법입니다. 두 방법에 차이는 없지만, 외국의 사용자들은 netfilter를 더 권장하는 것 같습니다.

/etc/firewall.user는 일종의 custom 룰로 사용하다보니, 좀 더 근본적인 네트워크 필터링?은 netfilter를 더 선호하는 것 같습니다.


/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


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

먼저 위의 세 줄을 모두 주석처리합니다.

# vi /etc/firewall.user

...

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

#iptables -I INPUT -i eth+ -p udp --dport 1194 -j ACCEPT

#iptables -I FORWARD -i tun+ -j ACCEPT

#iptables -I FORWARD -o tun+ -j ACCEPT

...


/etc/config/network 파일에 다음을 추가합니다.

...

...

config interface 'vpn0'

        option proto 'none'

        option ifname 'tun0'


네트워크 인터페이스를 하나 생성하는 것입니다.


/etc/config/firewall 파일에 다음을 추가합니다.(중간쯤에 추가하면 좋습니다.)


config zone

option input ACCEPT

option output ACCEPT

option name openvpn_zone

option network 'vpn0'

option forward REJECT


config forwarding

option dest lan

option src openvpn_zone


config forwarding

option dest wan

option src openvpn_zone


config forwarding

option dest openvpn_zone

option src lan


config rule

option target ACCEPT

option src wan

option proto udp

option dest_port 1194

option family ipv4

option name 'openvpn2openwrt'


순서대로 설명하면,

먼저 vpn 영역의 zone을 생성해줍니다.

두번째로 포워딩을 정의합니다. 포워딩 룰은 모두 3개를 정의합니다.

vpn 영역에서 lan 영역으로,  vpn 영역에서 wan 영역으로, 그리고, lan 영역에서 vpn 영역으로,

총 3개를 정의하면, vpn 상에서 lan 과 wan에 모두 연결이 됩니다.

마지막으로, openvpn 서비스가 사용하는 1194 포트에 대해서 udp 접속이 허가되도록 해줍니다.


이렇게 하고나서, 반드시 OpenWRT 장비를 리부팅해야 됩니다.  zone 설정은 시스템이 재시작되어야만 적용되기 때문이라고 합니다.

# /etc/init.d/network restart

# /etc/init.d/firewall restart

만으로는 해결되지 않습니다.

반드시, OpenWRT 장비를 리부팅해야만 합니다.



Posted by 훅크선장
, |