khoe OpenWrt cho FPT AX3000CV2 (vọc)

  • Người tạo chủ đề Người tạo chủ đề michioxd
  • Ngày bắt đầu Ngày bắt đầu
Topic sống lại rồi à .
Mà giờ không có thiết bị nên ko giúp đc mấy bác 😅
Con này dùng DSA driver thì nghỉ chơi NSS offload, lại thêm quả IPQ50xx có mỗi 1 RX queue hoàn toàn dựa vào 1 core CPU để xử lý thì chỉ còn cách overclock CPU lên càng cao và đẩy softirq sang cho cpu1 xử lý(set affinity), còn cpu0 xử lý OS thì tốc độ mạng càng nhanh (trừ các traffic đã đc offload xuống YT9215s sẽ không ảnh hưởng)
 
Con này LAN có 1Gbps, nếu bật packet steering lên thì LAN cũng đủ 1 Gbps.
Test thử tắt packet steering (xài 1 core, iperf PC <-> CV1 <-> Modem), tầm 600-700Mbps.
ps_disable.webp


Test bật packet steering (xài 2 core, iperf PC <-> CV1 <-> Modem), tầm 940Mbps.
ps_enable.webp


Còn wifi không có NSS driver thì không tiện nhắc tới :D
 
@greenhope bác ssh vào firmware gốc kiểu gì thế bác, em đang ở fw 0.10, mà em sửa để pass root trống nó cứ tự override về như cũ, mount hẳn cả aei_cfg để sửa nó cũng tự reset về như cũ
 
@greenhope bác ssh vào firmware gốc kiểu gì thế bác, em đang ở fw 0.10, mà em sửa để pass root trống nó cứ tự override về như cũ, mount hẳn cả aei_cfg để sửa nó cũng tự reset về như cũ
pass ssh tự động gen ra nó nằm ở file /usr/bin/update_lan_ssh_passkey.sh, 1 là xóa hay làm gì đó file này nhưng thằng CIG mount /overlay ở tmpfs nên reboot lại tự hồi phục lại, 2 là lấy pass ssh từ file đó :)
Cách lấy ssh pass này dùng chung cho cả con ax3000s mới luôn (chung cách generate pass).
 
Sửa lần cuối:
pass ssh tự động gen ra nó nằm ở file /usr/bin/update_lan_ssh_passkey.sh, 1 là xóa hay làm gì đó file này nhưng thằng CIG mount /overlay ở tmpfs nên reboot lại tự hồi phục lại, 2 là lấy pass ssh từ file đó :)
Cách lấy ssh pass này dùng chung cho cả con ax3000s mới luôn (chung cách generate pass).
Em cũng thử lấy pass theo file đó rồi bác mà cũng không được nó không cho vào chả hiểu sao (thử gen pass theo logic đấy rồi cũng không). Hồi trước em mới port cái fw này chơi fw 0.1 dễ chơi giờ có con khác chơi fw mới nó thêm mấy cái này muốn đấm nhau thật
 
Test thử ok mà, user ssh là root chứ không phải admin như web.
Bash:
root@AX3000C:~# fw_printenv | grep eth1addr | cut -d= -f2 | tr -d ':'
30600A4A7E85
root@AX3000C:~# echo -n "30600A4A7E85FTEL" | md5sum | cut -d' ' -f1
3f875d8c5026090a5271645c8ab9e1a2
Còn FPT đổi thuật toán sau vụ HV2 rồi thì không biết, cần có file update_lan_ssh_passkey.sh của firmware mới.
 
Test thử ok mà, user ssh là root chứ không phải admin như web.
Bash:
root@AX3000C:~# fw_printenv | grep eth1addr | cut -d= -f2 | tr -d ':'
30600A4A7E85
root@AX3000C:~# echo -n "30600A4A7E85FTEL" | md5sum | cut -d' ' -f1
3f875d8c5026090a5271645c8ab9e1a2
Còn FPT đổi thuật toán sau vụ HV2 rồi thì không biết, cần có file update_lan_ssh_passkey.sh của firmware mới.
Xoá hash trong file shadow như bác nói thì nó tự generate lại luôn bác, em đang ở trong failsafe
MobaXterm_MgA1OIkYpN.webp

reboot lần 2:
1779211746241.webp
 
Đã có cách bật SSH trên firmware 0.10.2
Sau khi ngồi mò 1 hồi thì cuối cùng em cũng mò được ra, thực chất thì cái phần SSH trên webui nó chỉ ẩn đi thôi, em ngồi mò source lại thì nó vẫn còn và có thể đổi được pass SSH, các bác vô webui của router rồi đăng nhập, sau đó mở F12 lên và paste code này của em (các bác nhớ đổi chỗ <mật khẩu> với mật khẩu của các bác, để như nào cũng được không cần phải 12 ký tự rồi ký tự đặc biệt bla bla):

JavaScript:
(async () => {
    const pwd = "<mật khẩu>";
    const sid = sessionStorage.getItem("sid");
    if (!sid) return console.error("pls login");

    const api = async (id, obj, method, args) =>
        (await fetch('/ubus', { method: 'POST', body: JSON.stringify({ jsonrpc: "2.0", id, method: "call", params: [sid, obj, method, args] }) })).json();

    try {
        console.log("setting password...");
        await api(1, "oui.network", "set_ssh_password", { password: pwd });

        console.log("starting dropbear...");
        await api(2, "oui.system", "init_action", { name: "dropbear", action: "start" });

        console.log("ok");
    } catch (e) {
        console.error("failed:", e);
    }
})();

Lúc mò thì em có phát hiện ra file /usr/libexec/rpcd/ssh thì mới để ý là nó chỉ ẩn phần ssh trên frontend.

Bash:
#!/bin/sh

. /usr/share/libubox/jshn.sh

rule_idx_get()
{
        idx=0
        while [ $idx -lt 500 ]
        do
                idx=`expr $idx + 1`
                fwrulename="$(uci get firewall.@rule[$idx].name)"
                if [ x"$fwrulename" == "x" ]; then
#                       echo 'there is no firewall rule' > /dev/console
                        break
                fi

                if [[ "$fwrulename" =~ "$1" ]]; then
#                        echo get rule $idx > /dev/console
                        return $idx
                fi
        done
        return 0
}

ssh_get(){
        local wan_ssh_state="0"
        local lan_ssh_state="0"
        rule_idx_get "WAN-SSH"
        wan_rule_idx=$?
        wan_ssh_target="$(uci get firewall.@rule[$wan_rule_idx].target)"
        if [ "$wan_ssh_target" == "ACCEPT" ]; then
                wan_ssh_state="1"
        fi

        rule_idx_get "LAN-SSH"
        lan_rule_idx=$?
        lan_ssh_target="$(uci get firewall.@rule[$lan_rule_idx].target)"
        if [ "$lan_ssh_target" == "ACCEPT" ]; then
                lan_ssh_state="1"
        fi
        ssh_passwd="$(uci get dropbear.@dropbear[0].password)"

        json_init
        json_add_string "WANState" $wan_ssh_state
        json_add_string "LANState" $lan_ssh_state
        json_add_string "Password" $ssh_passwd
        json_dump

        return $wan_ssh_state$lan_ssh_state
}

ssh_set(){
        local wan_ssh_state="0"
        local lan_ssh_state="0"
        rule_idx_get "WAN-SSH"
        wan_rule_idx=$?
        if [ "$1" == "1" ]; then
                uci set firewall.@rule[$wan_rule_idx].target="ACCEPT"
                uci set firewall.@rule[$wan_rule_idx].enabled="1"
                uci set dropbear.@dropbear[1].enable="1"
        else
                uci set firewall.@rule[$wan_rule_idx].target="REJECT"
        fi

        rule_idx_get "LAN-SSH"
        lan_rule_idx=$?
        if [ "$2" == "1" ]; then
                uci set firewall.@rule[$lan_rule_idx].target="ACCEPT"
                uci set firewall.@rule[$lan_rule_idx].enabled="1"
                uci set dropbear.@dropbear[0].enable="1"
        else
                uci set firewall.@rule[$lan_rule_idx].target="REJECT"
        fi

        uci set dropbear.@dropbear[0].password=$3
        uci set dropbear.@dropbear[1].password=$3
        uci commit dropbear
        uci commit firewall
        /etc/init.d/firewall reload >/dev/null 2>/dev/null &
        /etc/init.d/dropbear restart &
}

case "$1" in
        list)
                echo '{ "set": { "enabled": "[1|0]"}, "get": {} }'
        ;;
        call)
                case "$2" in
                        set)
                                read input;
                                json_load "$input"
                                json_get_var WANState WANState
                                json_get_var LANState LANState
                                json_get_var Password Password
#                               ssh_get > /dev/null
#                               current_ssh_state=$?
#                               echo current_ssh_state $current_ssh_state > /tmp/ssh.log
#                               new_ssh_state=$WANState$LANState
#                               new_password="$(uci get dropbear.@dropbear[0].password)"
#                               if [ "$current_ssh_state" == "$new_ssh_state" -a "$new_password" == "$Password" ]; then
#                                       ssh_get
#                                       return
#                               fi

                                ssh_set $WANState $LANState $Password
#                               echo "change ssh password" > /dev/console
#                               sleep 3
                                echo -e "rpcd:\n@$(date -R)\nssh_enabled:$((${WANState} + ${LANState}));" > /tmp/passlog.txt 2>&1
                                if [ "${WANState}" == "1" -o "${LANState}" == "1" ]; then
                                echo -e "$Password\n$Password" | passwd root > /tmp/sshpaswd.log
                                else
                                        #console auth:
                                        AEI_ADMIN_PWD=`fw_printenv  | grep AeiAdminPwd | cut -d '=' -f 2`
                                        echo -e "ssh:${AEI_ADMIN_PWD}" >> /tmp/passlog.txt 2>&1
                                        echo -e "${AEI_ADMIN_PWD}\n${AEI_ADMIN_PWD}" | passwd root >> /tmp/passlog.txt 2>&1
                                fi
                                ssh_get
                        ;;
                        get)
                                ssh_get
                        ;;
                esac
        ;;
esac

Tìm trong file bundled thì có file mã nguồn của phần ssh:
1779213618477.webp

Mở thử file đó thì bùm logic set password vẫn còn trong đó:
1779213732546.webp


Theo như em test thì reboot là nó lại về như cũ nên muốn vào lại ssh thì phải làm lại từ đầu, các bác có thể thử thêm command đổi password vào file /etc/rc.local cho nó tự đổi mỗi lần reboot :)
 
Sửa lần cuối:
Firmware con này dạng dual slot, thử ssh vào rồi gõ lệnh "switch_image" để nó switch về firmware cũ thử xem. Mới test thử up lên 0.10.2 rồi về firmware cũ được.
Thử cài Luci lên firmware gốc :)
Xem tệp đính kèm 3522862
cũng nghịch theo bác =))
1779244132179.webp


damn mê thật sự, con này cấu hình ngon mà cài thành công thì hết nc chấm
em suýt chọt hỏng 2 con vì cái này rồi bác :)
 
@michioxd

em follow hết các bước rồi nhưng reset nó lại ko vào được openwrt nữa
dưới là log boot sau khi reset. bác cứu em phát :(

Mã:
U-Boot 2016.01 (Feb 04 2026 - 12:48:54 +0000), Build: jenkins-WRT-fWF810D_FPT-195

DRAM:  smem ram ptable found: ver: 1 len: 4
512 MiB
NAND:  QPIC controller support serial NAND
ID = 82c882c8
Vendor = c8
Device = 82
Serial Nand Device Found With ID : 0xc8 0x82
Serial NAND device Manufacturer:GD5F2GM7REYIGR
Device Size:512 MiB, Page size:2048, Spare Size:128, ECC:8-bit
qpic_nand: changing oobsize to 80 from 128 bytes
SF: Unsupported flash IDs: manuf 00, jedec 0000, ext_jedec 0000
ipq_spi: SPI Flash not found (bus/cs/speed/mode) = (0/0/48000000/0)
512 MiB
MMC:   sdhci: Node Not found, skipping initialization

PCI Link Intialized
In:    serial@78AF000
Out:   serial@78AF000
Err:   serial@78AF000
machid: 8040202
eth0 MAC Address from ART is not valid
eth1 MAC Address from ART is not valid
Uboot: reading press button state again
Press Esc to stop autoboot:  0
failsafe not enabled
ubi0: attaching mtd1
ubi0: scanning is finished
ubi0: attached mtd1 (name "mtd=0", size 80 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 640, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 2/1, WL threshold: 4096, image sequence number: 0
ubi0: available PEBs: 556, total reserved PEBs: 84, PEBs reserved for bad PEB handling: 80
Read 0 bytes from volume kernel to 44000000
Volume kernel not found!
ubi0: detaching mtd1
ubi0: mtd1 is detached
Config not available
Failsafe:: Set offset to 0xD00000
U-Boot BUG at drivers/mtd/mtdcore.c:843!
ubi0: attaching mtd1
qpic_nand_read_page_scope_multi_page: ecc failure while reading from 1ca0800
qpic_nand_read_page_scope_multi_page: ecc failure while reading from 1ca0800
qpic_nand_read_page_scope_multi_page: ecc failure while reading from 1ca0800
qpic_nand_read_page_scope_multi_page: ecc failure while reading from 1ca0800
ubi0: scanning is finished
ubi0: attached mtd1 (name "mtd=0", size 80 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 640, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 3, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 1769978332
ubi0: available PEBs: 0, total reserved PEBs: 640, PEBs reserved for bad PEB handling: 80
Read 0 bytes from volume kernel to 44000000
No size specified -> Using max size (5586944)
Config not available

Net:   cmbblk is stable 5
MAC0 addr:0:11:22:33:44:55
PHY ID1: 0x4d
PHY ID2: 0xd0c0
MAC1 addr:0:11:22:33:44:56
board_update_caldata: Unable to find slot-Id, Default CapIn/CapOut values used
eth0, eth1

Net:   cmbblk is stable 5
MAC0 addr:0:11:22:33:44:55
PHY ID1: 0x4d
PHY ID2: 0xd0c0
MAC1 addr:0:11:22:33:44:56
board_update_caldata: Unable to find slot-Id, Default CapIn/CapOut values used
, eth0, eth1
IPQ5018#
 

Thống kê chủ đề

Ngày tạo
michioxd,
Người trả lời cuối
iCloud,
Trả lời
99
Lượt xem
16.768
Quay lại
Lên đầu trang