성능을 크게 향상시키기 위해 DD-WRT 대체 펌웨어로 홈 라우터를 개조하는 방법을 이미 보여 드렸으며, 오늘은 DD-WRT Mod-Kit을 사용하여 더욱 발전하는 방법을 보여 드리겠습니다.
아직 읽지 않았다면 시리즈의 이전 기사 두 개를 확인하세요.
이러한 주제에 익숙하다고 가정하고 계속 읽으십시오. 이 가이드는 좀 더 기술적 인 내용이므로 초보자는 라우터를 수정할 때주의해야합니다.
개요
이 가이드에서는 ' 펌웨어 수정 키트 “.
펌웨어 수정 키트를 사용하면 소스에서 컴파일하지 않고도 펌웨어를 수정할 수 있습니다. 제공된 스크립트를 사용하여 이러한 방식으로 변경하는 것은 일부 파일을 다운로드, 교체 및 삭제하는 간단한 문제가됩니다.
이 방법을 사용하는 가장 주된 이유는 최근에 DD-WRT가 Openwrt IPKG 패키지는 하드 드라이브 (USB를 통해)가있는 라우터로 이동하여 모드 키트가 HD를 사용할 수없는 경우에 성공적으로 IPKG 패키지를 성공적으로 설치하는 유일한 일관된 방법이되었습니다. 또한이 방법은 4MB의 플래시 만있는 라우터의 경우 실제 문제가되는 패키지 설치에 대한 JFFS 종속성으로부터 사용자를 덜어주는 추가 이점이 있습니다.
목표
이 절차에 대한 지침은 DD-WRT 위키 그리고 개발자 사이트 , 우리는이 가이드를 누구나 다음 목표를 달성하는 데 사용할 수있는 복사 및 붙여 넣기 절차로 만드는 것을 목표로합니다.
- knockd 패키지와 그 종속성을 설치하십시오.
-
NVRAM 기반 생성 구성으로 ssmtp 패키지를 설치합니다.
- 선택적으로 TLS smtp (Gmail 지원이라고도 함)를 지원합니다.
이 절차를 수행 한 후에는 다른 패키지 설치에 맞게 조정하는 것이 관련이 간단해야합니다.
경고
:
가볍게 밟으십시오. 수정 키트를 잘못 사용하면 필요한 라우터가 남게 될 수 있습니다.
벽돌 제거
(순서대로
쓸모없는 벽돌
). 하지만 당신이 진정한 괴짜라면 아마 이데올로기를 구독 할 것입니다.
물건을 파괴 할 수있는 사람, 물건을 제어하는 사람
, 진정한 괴짜 만이 그렇게합니다.
전제 조건
- 이 절차를 사용하면 벽돌 라우터 만들기에서와 같이 라우터 쓸 수 없는, 당사는 아래 절차를 사용하여 직접적 또는 다른 방식으로 발생할 수있는 손해에 대해 책임을지지 않습니다.
- 이 절차는 데비안 기반 시스템 (Lenny, Squeeze 및 Mint)에서 수행되었으며 아래 지침에서는 사용자가 하나를 사용한다고 가정합니다.
- 이 절차는 하드웨어 설정에 적용되는 모든 전제 조건,주의 사항 및 제한 사항과 함께 DD-WRT로 라우터를 플래싱 한 경험이있는 사람에게만 권장됩니다. 시작하기 좋은 곳은 DD-WRT를 사용하여 홈 라우터를 강력한 성능의 라우터로 전환 안내서.
- 라우터는 최소한 DD-WRT의 "미니"버전을 지원해야합니다.
- 이 절차는 Linksys WRT54GS / L 라우터에서 생성 및 테스트되었습니다. 다른 공급 업체의 라우터를 사용하는 경우 마일리지가 매우 클 수 있습니다.
설정
필수 패키지 설치
펌웨어 수정 키트에는 컴파일 및 작동을위한 몇 가지 종속성이 있습니다. 한 번에 모두 설치 / 업데이트하려면 터미널에서 다음 명령을 실행하십시오.
sudo aptitude install gcc g ++ binutils patch bzip2 flex bison make gettext unzip zlib1g-dev libc6 subversion
모드 키트 다운로드
하위 폴더를 만들고 공식 SVN에서 키트를 가져옵니다.
mkdir 펌웨어 _mod_kit
cd 펌웨어 _mod_kit
svn checkout http://firmware-mod-kit.googlecode.com/svn/trunk/ firmware-mod-kit-read-only
cd 펌웨어 모드 키트 읽기 전용 / 트렁크 /
작업 할 펌웨어 다운로드
가장 먼저 고려해야 할 것은 어떤 버전을 사용하고 싶은지입니다.
경험상의 규칙은 : 의심 스러울 때 "미니"를 사용하는 것입니다. 이는 라우터가 최소한 "미니"버전을 지원하는 한이를 사용하면 블로 트웨어없이 가장 일반적으로 사용되는 모든 기능을 제공하기 때문입니다. 따라서 절차를위한 공간과 JFFS 공간을 모두 남겨 둡니다.
다른 용도
대부분의 경우에.
버전을 결정한 후에는 "안정적인"버전에 비해 버그 수정이 많은 경향이 있으므로 최신 버전의 펌웨어를 사용하는 것이 좋습니다.
이 글을 쓰는 시점에서 최신 버전은 "03-17-11-r16454"였으며이 개정판은 다음 명령에 사용되었습니다.
wget http://www.dd-wrt.com/dd-wrtv2/downloads/others/eko/BrainSlayer-V24-preSP2/2011/03-17-11-r16454/broadcom/dd-wrt.v24_mini_generic.bin
사용중인 버전을 더 쉽게 추적하려면 다운로드 한 파일의 이름을 변경하여 버전 번호를 나타내십시오.
mv dd-wrt.v24_mini_generic.bin dd-wrt.v24_mini_generic-03-17-11-r16454.bin
물론 이것은 선택 사항이지만 아래 명령은 파일 이름을 변경했다고 가정합니다.
펌웨어 추출
펌웨어 내에서 파일을 변경하려면 해당 내용을 임시 디렉토리에 추출해야합니다.
이 명령의 구문은 다음과 같습니다.
./extract_firmware.sh FIRMWARE_IMAGE WORKING_DIRECTORY
우리의 경우 이것은 다음과 같이 번역됩니다.
./extract_firmware.sh dd-wrt.v24_mini_generic-03-17-11-r16454.bin ./working_dir_mini1
참고 :이 명령을 처음 실행하면 시스템에 mod-kit 도구가 빌드됩니다. 이것은 한 번만 발생하며 시간이 조금 걸릴 수 있습니다.
패키지 설치
이제 펌웨어가 추출되었으므로 패키지를 설치할 수 있습니다.
일반적으로 절차는 패키지 및 해당 종속성을 다음 위치에서 ipk 파일 형식으로 다운로드하는 것입니다.
openWRT 저장소
. 다운로드가 완료되면 제공된 스크립트를 사용하여 압축을 푼 펌웨어에 설치하십시오.
노크 된 패키지
Knockd를 구성하고 사용하는 방법에 대한 자세한 지침은 향후 도움말에 자세히 설명되어 있으므로 Knockd는 공간을 많이 차지하지 않으므로 지금은이 단계를 건너 뛰거나 향후 준비를 위해 수행 할 수 있습니다.
Knockd는 시퀀스에 대한 링크 계층에서 통신 이벤트를 수신 한 다음 이에 대해 작동하는 데몬입니다.
이것이 의미하는 바는 데몬을 실행하는 장치가 포트를 "수신"하지 않고 (포트 스캔은 열린 것으로 보지 않음) 단일 명령으로 모든
길
전체 스크립트에.
이 기술 사용
홈 네트워크를 노출하지 않고 원격으로 (인터넷을 통해) 필요한 모든 종류의 작업을 수행하도록 서버를 트리거 할 수 있습니다.
Knockd에는 나열된 종속성이 하나만 있으므로 다음을 실행하여 패키지와 해당 종속성을 다운로드하십시오.
wget http://downloads.openwrt.org/backports/rc5/knockd_0.5-1_mipsel.ipk
wget http://downloads.openwrt.org/whiterussian/packages/libpcap_0.9.4-1_mipsel.ipk
펌웨어에 "knock daemon"(knockd) ipk를 설치합니다.
./ipkg_install.sh knockd_0.5-1_mipsel.ipk ./working_dir_mini1/
펌웨어에 "패킷 캡처"(libpcap) ipk를 설치합니다.
./ipkg_install.sh libpcap_0.9.4-1_mipsel.ipk ./working_dir_mini1/
"knockd"는 대체 구성 파일 (향후 기사에서 설명 할 방법)을 사용하여 호출 할 수 있으므로 다른 작업을 수행 할 필요가 없으며 설치하려는 경우 펌웨어 빌드 섹션으로 건너 뛸 수 있습니다.
SSMTP 패키지
SSMTP 패키지를 사용하면 라우터가
Gmail 또는 SMTP를 사용하여 Linux에서 이메일 경고를 설정하는 방법
서버용. 그 당시에 DD-WRT에 대해이를 구성하는 방법을 보여 주겠다고 약속했으며 이제 제공하겠습니다.
이것은 이메일을 통해 작업에 대한 피드백을 받고 싶은 라우터에서 스크립트를 작성하려는 경우 주로 유용합니다.
이 패키지의 설정은 임베디드 시스템의 제한으로 인해 일반 Linux 시스템에있는 것보다 약간 더 복잡합니다. 심호흡을하십시오… 준비 되었습니까?…. 가자… :)
패키지 다운로드 :
wget http://downloads.openwrt.org/backports/rc5/ssmtp_2.61-1_mipsel.ipk
펌웨어에 "ssmtp"ipk를 설치합니다.
./ipkg_install.sh ssmtp_2.61-1_mipsel.ipk ./working_dir_mini1/
TLS 지원 (선택 사항)
SSMTP는 다른 패키지를 종속성으로 나열하지 않지만 TLS 인증이 필요한 SMTP 게이트웨이를 사용하려는 경우 (예 :
Gmail
), openSSL 패키지도 설치해야합니다.
노트
: 거대한
약점
나중에 JFFS를 위해 라우터에서 상당히 줄어든 공간의 형태로이를 수행합니다. 즉, openSSL 패키지는 총 4MB (일반적인 비 "메가"지원 라우터의 경우)에서 약 500K의 공간을 차지하며 JFFS 오버 헤드에 더해져 남은 공간은 귀중하지만 여유 JFFS 공간 (WRT54GL에서 약 60KB).
여전히 SMTP 서버 (일반적으로 ISP)를 필요로하는 비 TLS가 있으므로 게이트웨이가 필요한 TLS를 사용해야하는지 잠시 시간을내어 생각하는 것이 좋습니다.
단점에도 불구하고 TLS 지원을 활성화하기로 결정한 경우 openSSL 패키지를 다운로드하십시오.
wget http://downloads.openwrt.org/whiterussian/packages/libopenssl_0.9.8d-1_mipsel.ipk
펌웨어에“openSSL”(libopenssl) ipk를 설치합니다.
./ipkg_install.sh libopenssl_0.9.8d-1_mipsel.ipk ./working_dir_mini1/
구성
SSMTP 패키지에는 대체 구성 파일로 호출 할 수 없다는 제한이 있습니다.
펌웨어는 라우터에있을 때 읽기 전용이기 때문에 기본적으로 구성을 펌웨어에 하드 코딩 만 할 수 있습니다.
그러나 모든 펌웨어 수정 단계를 거치지 않고 이메일 설정 만 변경하려는 경우에는 어떻게합니까? (예 : 비밀번호 변경).
이를 위해 Jeremy (펌웨어 모드 키트 제작자)와 저 모두이 작업을 수행하는 유일한 방법은 다음과 같을 것이라는 결론에 도달했습니다 (겸손하게 추가 할 수 있다면 독립적으로).
- ssmtp 패키지가 etc 아래의 읽기 전용 위치를 가리키는 구성 파일 위치를 런타임에 쓸 수있는 tmp 디렉토리를 가리 키도록 만드십시오.
- 시작시 NVRAM 변수를 기반으로 구성을 동적으로 생성하는 스크립트를 만듭니다.
이를 위해서는 몇 가지 추가 단계가 필요합니다.
ssmtp 구성 디렉토리 Symlink
위에서 설명한 바와 같이
/ etc / ssmtp
라우터의 위치에서
/ tmp
디렉터리는 런타임에 라우터에서 쓸 수있는 유일한 장소입니다. 이렇게하려면 ipk 설치 프로그램에서 생성 한 ssmtp 디렉토리를 삭제합니다.
rm -rf ./working_dir_mini1/rootfs/etc/ssmtp/
라우터의 루트 파일 시스템에서 / etc / ssmtp를 가리키는 새 심볼릭 링크를 만들고 / tmp / etc / ssmtp를 절대 경로로 가리 킵니다.
ln -s / tmp / etc / ssmtp / ./working_dir_mini1/rootfs/etc/ssmtp
노트 : 지금은 비논리적으로 보이지만 패키지의 구성 디렉토리를 펌웨어 수정 키트의 작업 디렉토리 외부의 위치를 가리키고 있기 때문에 런타임에 라우터의 관점에서 볼 때 완전히 괜찮아 보입니다.
초기화 스크립트
이 스크립트를 펌웨어에 삽입하지 않고 나중에 시작 스크립트로 실행하는 것이 완전히 가능하지만, 나중에 사용하기위한 예제로만 여기에 두는 것이 적절하다고 생각합니다.
원래 Jeremy는 누군가의 요청에 맞게 스크립트를 만들었고 나중에 DD-WRT 및 syslog보고와 더 잘 호환되도록 조정하고 보강했습니다.
새 init (시작) 스크립트를 만듭니다.
vi ./working_dir_mini1/rootfs/etc/init.d/S80ssmtp
참고 : 라우터에서 사용할 수있는 것과 일치하기 때문에 다른 편집기를 사용할 수 있습니다. 저는 vi를 사용합니다.
이것을 내용으로 만드십시오.
#! / bin / sh
#
# 제목 : ssmtp_nvram.sh
# 작성자 : Jeremy Collake 및 Aviad Raviv
# 사이트 : http://www.bitsum.com, http://howtogeek.com
#
# nvram vars에서 구성 파일을 빌드하는 스크립트.
# 사용하는 모든 구성 파일에서 작동합니다.
# var = value 유형 쌍.
#
# nvram 변수에 접두사를 사용합니다.
#
# и.е.
# ssmtp hostname = something
# ssmtp.conf로 변환
# hostname = something
#
logger_func ()
{
로거 -s -p local0.notice -t SSMTP_init $ 1
}
logger_func "########### SSMTP init 실행 시작 ###########"
logger_func "/ tmp에 etc 디렉토리 생성"
[ ! -d /etc/ssmtp/ ] && mkdir -p / tmp / etc / ssmtp /
CONFIG_FILE = / etc / ssmtp / ssmtp.conf
NVRAM_PREFIX = ssmtp_
PACKAGE_NAME = ʻecho $ NVRAM_PREFIX | sed 's / _ / /'`
logger_func "$ PACKAGE_NAME 패키지에 대한 $ CONFIG_FILE 생성 중"
#echo $ 0 : $ PACKAGE_NAME 패키지에 대한 $ CONFIG_FILE 생성
echo "#! / bin / sh"> $ CONFIG_FILE
echo "#">> $ CONFIG_FILE
echo "# $ 0에 의해 nvram을 기반으로 자동 생성">> $ CONFIG_FILE
echo "#">> $ CONFIG_FILE
[ -z "`nvram show | grep ssmtp`" ] 인 경우
그때
logger_func "conf 파일을 생성하는 데 필요한 NVRAM 변수를 설정하지 않은 것 같습니다."
logger_func "** 시작 스크립트에서 다음 명령 사용을 고려 ** :"
logger_func "nvram set [email protected]"
logger_func "nvram set ssmtp_mailhub = smtp.gmail.com : 587"
logger_func "nvram set [email protected]"
logger_func "nvram set ssmtp_UseSTARTTLS = YES"
logger_func "nvram set ssmtp_AuthUser = username"
logger_func "nvram set ssmtp_AuthPass = password"
logger_func "nvram set ssmtp_FromLineOverride = YES"
logger_func "NVRAM 변수를 만들고 init 스크립트를 다시 실행하거나 설정을 적용하려면 재부팅하십시오."
0 번 출구
있다
###########################################################
#
# 메인 루프
#
SED_COMMAND = "s / $ NVRAM_PREFIX / /"
CONFIG_VARS =`nvram 쇼 | grep $ NVRAM_PREFIX | sed "$ SED_COMMAND"`
$ CONFIG_VARS의 i에 대해; 하다
echo $ i >> $ CONFIG_FILE
끝난
###########################################################
#
# 위생 검사
#
[ ! -f "$CONFIG_FILE" ] 인 경우; 그때
# echo "$ 0 : 오류-$ CONFIG_FILE을 생성 할 수 없습니다. 아마도 symink가 없을 것입니다. / etc / XXXX-> / tmp / etc / XXXX?"
logger_func "오류-$ CONFIG_FILE을 (를) 만들 수 없습니다. 아마도 symink / etc / XXXX-> / tmp / etc / XXXX?"
있다
logger_func "########### SSMTP 초기화 실행 완료 ###########"
실행 가능하게 만드십시오.
chmod + x ./working_dir_mini1/rootfs/etc/init.d/S80ssmtp
스크립트에서 NVRAM 대기 변수를 기록해 두십시오. 라우터에 수정 된 펌웨어를 설치 한 후 작업 할 무언가를 제공하는 것은 우리의 책임입니다.
수정 된 펌웨어 빌드
이제 모든 것이 준비되었으므로 수정 된 펌웨어를 압축 된 바이너리로 다시 패키징하여 라우터로 플래시 할 수 있습니다.
"build.sh"스크립트 구문은 다음과 같습니다.
./build_firmware.sh OUTPUT_DIR WORKING_DIRECTORY
이를 위해 제공된 스크립트를 사용하므로 다음을 실행하십시오.
./build_firmware.sh output_mini1 ./working_dir_mini1/
"빌드"작업이 완료되면 "출력"디렉토리에서 사용되기 위해 대기중인 여러 펌웨어 이미지가 있습니다.
이제 "custom_image_00001-generic.bin"이라는 파일을 라우터에 다음과 같이 플래시 할 수 있습니다. 일반적으로 DD-WRT 펌웨어 .
노트 : 펌웨어 플래시 전, 도중 및 직후에 "공장 기본값"으로 복원하는 것을 잊지 마십시오.
플래시 단계 후
ssmtp 구성 파일을 생성하기 위해 SSMTP 패키지가 NVRAM 변수를 찾도록 만들었으므로 이제 누락 된 정보를 제공해야합니다.
웹 GUI "명령 실행"기능을 사용하여이를 수행합니다.
웹 GUI-> "관리"-> "명령"-> 텍스트 상자에 다음을 붙여 넣으십시오.
nvram set [email protected]
nvram set ssmtp_mailhub = smtp.gmail.com : 587
nvram set [email protected]
nvram set ssmtp_UseSTARTTLS = YES
nvram set ssmtp_AuthUser = your-gmail-user-name (@ gmail.com 제외)
nvram set ssmtp_AuthPass = you-gmail-password
nvram set ssmtp_FromLineOverride = YES
nvram 커밋
등호 (=) 뒤의 텍스트를 실제 정보로 바꾼 다음 "명령 실행"을 누르십시오.
노트
: TLS가 아닌 일반 SMTP 서버를 사용하는 경우 사용할 포트는 587 대신 25입니다.
이제 SSMTP 정보를 사용할 준비가되었으므로 init 스크립트를 호출해야합니다. 따라서 라우터를 재부팅하거나 "명령"텍스트 상자에 붙여 넣을 수 있습니다.
/etc/init.d/S80ssmtp
그런 다음 "명령 실행"을 다시 누르십시오.
이 명령의 출력은 다음과 같아야합니다.
이메일을 보낼 수 있는지 테스트
이메일 주소와 함께 다음 명령을 "명령"텍스트 상자에 다시 붙여 넣으십시오.
echo "123 qwe로 이메일을 보내는 테스트 도가니"| ssmtp -vvv [email protected]
그런 다음 "명령 실행"을 다시 누르십시오.
자세한 설명을 위해 -vvv 옵션을 사용했기 때문에이 명령의 출력은 다음과 같아야합니다.
모든 것이 잘 되었다면 몇 초 안에 테스트 이메일을 받게 될 것입니다.
이 정보를 사용하여 가능하다고 생각한 것보다 훨씬 더 홈 라우터 제한을 푸시 할 수 있기를 바랍니다. 진정한 홈 라우터 및 DD-WRT 제어 …
Linux는 수명을 연장하고 Linux는 의식을 확장합니다… Linux는 패킷 이동에 필수적입니다.