OpenWrt 컴파일 for MX4300 (Linksys)

Linksys LN1301 (MX4300)에 OpenWrt를 설치하면서 남기는 글이다.

1. 소스코드

MX4300은 OpenWrt에 정식버전이 없기 때문에 코드를 받아서 컴파일을 해야한다.
아래에서 코드를 다운로드 한다.
https://github.com/qosmio/openwrt-ipq/tree/qualcommax-6.x-nss-mx4300-6.9

2. 환경구축

가상환경에 우분투 24.04.1 LTS를 설치하고 아래 패키지를 설치해준다.

sudo apt update
sudo apt upgrade -y
sudo apt install build-essential clang flex bison g++ gawk gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev python3-distutils python3-setuptools rsync swig unzip zlib1g-dev file wget

3. git clone

git에서 코드를 복제해준다.
아래부터는 root 권한으로 진행하면 컴파일할 때 오류가 발생한다.

cd /home
git clone https://github.com/qosmio/openwrt-ipq -b main-nss-mx4300
cd openwrt-ipq
./scripts/feeds update
./scripts/feeds install -a
cp nss-setup/config-nss.seed .config

추가할 패키지가 있으면 아래명령사용

./scripts/feeds install luci-app-samba4
./scripts/feeds install samba4-server
./scripts/feeds install samba4-utils

.config 파일을 열어서 MX4300 부분의 “is not set”을 수정해준다.

#CONFIG_TARGET_qualcommax_ipq807x_DEVICE_linksys_mx4300 is not set
CONFIG_TARGET_qualcommax_ipq807x_DEVICE_linksys_mx4300=y
make defconfig V=s
make download -j$(nproc) V=s
make -j$(nproc) V=s

4. bin 파일

yell@dev-openwrt:~/openwrt-ipq$ cd bin/targets/qualcommax/ipq807x/
yell@dev-openwrt:~/openwrt-ipq/bin/targets/qualcommax/ipq807x$ ls -al
total 100032
drwxr-xr-x 3 yell yell     4096 Dec 23 08:56 .
drwxr-xr-x 3 yell yell     4096 Dec 23 06:37 ..
-rw-r--r-- 1 yell yell     5873 Dec 23 08:18 config.buildinfo
-rw-r--r-- 1 yell yell      703 Dec 23 08:18 feeds.buildinfo
-rw-r--r-- 1 yell yell 35916962 Dec 23 08:56 kernel-debug.tar.zst
-rw-r--r-- 1 yell yell 21581628 Dec 23 08:56 openwrt-qualcommax-ipq807x-linksys_mx4300-initramfs-uImage.itb
-rw-r--r-- 1 yell yell     8489 Dec 23 08:56 openwrt-qualcommax-ipq807x-linksys_mx4300.manifest
-rw-r--r-- 1 yell yell 24383488 Dec 23 08:56 openwrt-qualcommax-ipq807x-linksys_mx4300-squashfs-factory.bin
-rw-r--r-- 1 yell yell 20490511 Dec 23 08:56 openwrt-qualcommax-ipq807x-linksys_mx4300-squashfs-sysupgrade.bin
drwxr-xr-x 3 yell yell    12288 Dec 23 08:56 packages
-rw-r--r-- 1 yell yell     2026 Dec 23 08:56 profiles.json
-rw-r--r-- 1 yell yell      923 Dec 23 08:56 sha256sums
-rw-r--r-- 1 yell yell       18 Dec 23 08:18 version.buildinfo

Redsocks – Tcp to Proxy Redirector

서버로 들어오는 패킷을 socks5로 내보내기 위해서 redsocks를 활용했다.
설명은 우분투 18.04 기준으로 한다

Redsocks 홈페이지

https://github.com/darkk/redsocks

패키지

# apt update && apt -y upgrade
# apt install redsocks

패키지 매니저로 설치한다

환경설정파일

base {
    log_debug = on;
    log_info = on;
    log = "file:/var/log/redsocks.log";
    daemon = on;
    redirector = iptables;
}
redsocks {
    local_ip = 0.0.0.0;
    local_port = 12345;
    ip = {프록시서버 아이피};
    port = {프록시서버 포트};
    type = socks5;
}

/etc/redsocks.conf

# systemctl restart redsocks

redsocks 재시작

# iptables -t nat -A PREROUTING --in-interface ppp0 -p tcp -j REDIRECT --to-ports 12345

ppp0로 들어오는 패킷을 redsocks 포트인 12345로 리다이렉트 시켜준다

시스코 SNMP 설정하기

ACL에 허용할 아이피 추가

sys>en
sys# conf t
sys(config)# ip access-list standard 90
sys(config-ext-nacl)# permit host {허용할 아이피}
sys(config-ext-nacl)# exit
sys(config)# exit

ACL 설정한다.
여기서는 90번으로 추가했다.
허용할 아이피를 입력하면 그 외는 모두 차단된다.

ACL 확인

sys# show access-lists

Standard IP access list 90
     10 permit {허용할 아이피}

ACL 리스트를 확인한다

SNMP 커뮤니티 추가

sys# conf t
sys(config)# snmp-server community {커뮤니티이름} ro 90
sys(config)# exit

snmp 서버에 커뮤니티를 추가한다.

추가시 RO (read only) 권한으로 하며, 사용할 access-list 번호는 앞에서 추가한 90으로 한다.

SNMP 동작확인

sys# show snmp community

Community name: {커뮤니티이름}
 Community Index: {커뮤니티이름}
 Community SecurityName: {커뮤니티이름}
 storage-type: nonvolatile        active access-list: 90

snmp 정보를 확인해보면 커뮤니티와 access-list가 정상적인지 확인할 수 있다.