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 :)
 
hi bác @michioxd
em mới ngó qua git của bác, tính vọc mà đọc tới cái bước đấu esp vào nhìn mãi ko ra chân đề hàn dây :(
bác cho em xin lại cái hình rõ hơn dc ko ạ?
ngoài ra em có cái usb ttl xài có dc ko nhỉ
 

Thống kê chủ đề

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