OpenWRT 기반 공유기에서 크래시

KT DW02-412H(QCA9558/mips24kc) 공유기에 OpenWRT 22.03.0-rc4 정식 버전(ath79)을 깔아 사용하고 있습니다. 기존에는 ar71xx 타겟 기반의 19.07 유저 메이드 펌웨어를 사용하고 있었는데, 이때까지는 19.07용 패키지를 사용하여 문제없이 구동했습니다.(MUDEC_00179 오류가 떴으나 문서에서 무시해도 문제가 없다고 해서 무시 후 사용) 최근에 22.03으로 업데이트 후에 아직 해당 버전용 정식 패키지가 없어 20.02용 패키지를 사용했고, 로그인 및 구동까지 완벽히 성공했습니다. 그러나 오늘 중계 서버 설정을 바꾼 후부터(여기까지는 문제 X) 로그인 중에 크래시가 발생하더니 서너번 정도 지웠다 깐 후에는 아예 실행하면 크래시가 바로 발생하는 상황입니다. 지원 버전과 OpenWRT 버전이 달라서 생기는 문제인지, 아니면 다른 문제인지, 만약 다른 문제라면 이게 공유기상의 mudfish 관련된 데이터를 전부 지워 해결될 수 있는지 알고 싶습니다. 초짜라 로그를 어떻게 볼지 몰라서 첨부는 못하는데, 만약 첨부할 수 있는 방법을 알려주시면 첨부하겠습니다.

ㅠ.ㅠ 우선 Index of /releases/openwrt/packages-20.02/ 에 있는 패키지들이 OpenWRT 22.03 버전 지원 패키지들입니다. 그렇다 보니, 만약 해당 부분에서 제대로 동작을 하지 않는다면 적어도 호환성 이슈는 아닐 것으로 추측이 됩니다.

ㅠ.ㅠ 일단 @Restric6502 님께서 어느 정도의 작업을 하실 수 있느냐에 따라 달라질 것으로 보입니다. 만약 해당 라우터에서 SSH 접속을 하실 수 있다면 다음과 같은 명령으로 mudrun_stdout.txt 파일 내용을 보여주세요.

$ cat /tmp/mudrun_stdout.txt

일단 어느 수준에서 크래쉬가 일어나는지 조금씩 봐야 할 듯 합니다. ㅠ.ㅠ 혹시나 mudrun 자체가 제대로 실행이 되지 않는 이슈라면 다음과 같이 .conf 파일을 삭제해 보시기 바랍니다.

$ rm -f /opt/mudfish-pi/current/var/.conf
#      0.03 run  Checking the WAN network reachable to 14.63.223.218:443 (count 0).
#      0.05 run  Good.  Reached to the WAN network (14.63.223.218:443).
----   0.08 param Unknown parameter "mudfish.fullvpn_exceptions".
----   0.08 param Unknown parameter "mudfish.credit_saving_mode".
----   0.08 param Unknown parameter "mudfish.fullvpn_vid".
----   0.08 param Unknown parameter "mudfish.prefer_wfp".
#      0.09 run  Trying to launch mudflow
#      0.09 run  Launched mudflow
#      0.09 run  Trying to launch mudfish
#      0.09 run  Launched mudfish
#      0.10 httpd Listening 192.168.1.1:8282
#      0.11 run  Skipped to launch the default browser to 192.168.1.1:8282
----   1.09 run  mudfish process isn't found. Crash? Exits the launcher.

/tmp/mudrun_stdout.txt의 내용

오! 제시해주신대로 .conf파일을 지우니 일단 접속은 됩니다 ㅠㅠ 기능 테스트 후 다시 답글 달겠습니다.

음. 일단 .conf파일 삭제 후에는 로그인까지는 됩니다. 그리고 설정도 정상적으로 들어가지는데 Full VPN이 켜지면 그 다음부터는 바로 크래시가 일어나는것 같습니다.
잠깐 Full VPN이 되고 있다고 뜰때 실제로 IP 조회를 해보면 안되는것 같구요, 로그인 후 Full VPN이 작동되고 있지 않을 때 자체 진단 메뉴가 떴을때를 보면 Core 작동에 X가 떠있었습니다.
한번 Full VPN을 키니 바로 로그아웃 되었고(기존에는 설정 적용하려면 로그아웃해야한다는 안내 메시지가 떴던것 같은데, 지금은 그냥 바로 로그아웃 되네요.) 그 후에는 프로세스가 크래시로 꺼져서 conf파일 지우고 다시 로그인했는데도 Full VPN은 여전히 작동중이라고 떴고 그 후에 설정이든 어디든 들어가면 바로 crash 되는듯합니다. 지금은 다시 conf파일 지우고 로그인하면 바로 화면도 안보여주고 크래시가 발생하구요.

#      0.05 run  Checking the WAN network reachable to 14.63.223.218:443 (count 0).
#      0.06 run  Good.  Reached to the WAN network (14.63.223.218:443).
#      0.07 httpd Listening 192.168.1.1:8282
#      0.07 run  Skipped to launch the default browser to 192.168.1.1:8282
#      2.02 run  Killing mudflow process
#      2.02 run  Killing mudfish process
#      2.02 httpd ODR_unlink('.mudfish.vsm') failed: ret -1 errno 2
#      2.02 httpd ODR_unlink('.mudflow.vsm') failed: ret -1 errno 2
#      3.18 run  Trying to launch mudflow
#      3.18 run  Launched mudflow
#      3.18 run  Trying to launch mudfish
#      3.18 run  Launched mudfish
----   4.06 run  mudfish process isn't found. Crash? Exits the launcher.

이게 현재의 /tmp/mudrun_stdout.txt의 내용입니다.

이게 잠시 작동할 때의 자체 진단 결과입니다.

ㅠ.ㅠ 우선은 조금의 진전이 있다니 다행입니다. 보여주신 로그 파일을 봐서는 미꾸라지 core 프로세스가 어떠한 이유로 crash 된 듯 보이네요…

SSH 사용이 가능하시다니, 좀 더 테스트를 해보실 수 있으실 듯 한데요, 혹시 Full VPN 모드를 명령어 모드에서 직접 시도를 해보셨는지요? 아래와 같이 하실 수 있습니다.

/opt/mudfish-pi/2.1.26/bin/mudfish -u "<사용자ID>" -p "<사용자암호>" -f -s <SID>

여기에서 사용자 ID/PWD 는 현재 사용하고 계신 계정을 사용하시면 됩니다. 는 미꾸라지 중계 서버의 고유 번호인데요, 다음과 같이 확인하실 수 있습니다.

  • Nodes Status - MUDFISH: Acceleration As a Service 에 접속하고, 중계 서버 이름을 클릭하면 Pop-up 창이 뜹니다.
  • 해당 pop-up 창의 URL 을 보면, https://mudfish.net/admin/serverstatus/<SID> 형태에서 찾으실 수 있습니다. 예를 들어, AE Middle East (Dubai - Aliyun) 중계 서버의 SID 는 421 입니다.

혹시 위의 명령을 직접 실행시키면 실행 중간에 미꾸라지가 crash 나는지를 한번 살펴봐 주세요.

root@OpenWrt:/# /opt/mudfish-pi/2.1.26/bin/mudfish -u "(ID)" -p "(비밀번호)" -f -s 258
Error loading shared library libubox.so.20210516: No such file or directory (needed by /opt/mudfish-pi/2.1.26/bin/mudfish)

라고 뜨며 실행 자체가 안됩니다.

root@OpenWrt:/opt/mudfish-pi/2.1.26/bin# ls
mudadm      muddiag     mudfish     mudflow     mudhttpc    mudlog      mudrun      mudsupport

해당 경로에서 파일 목록을 출력하면 이렇게 뜹니다.(모두 녹색 실행 파일)

root@OpenWrt:/opt/mudfish-pi/2.1.26/bin# mudfish -u "(ID)" -p "(비밀번호)" -f -s 258
-ash: mudfish: not found

해당 경로에서 직접 실행시에는 이렇게 뜹니다.

아… ㅠ.ㅠ 결국 이게 원인이군요. 일단 제가 @Restric6502 님의 메세지를 확인해 보면, 어떠한 이유로 libubox.so.20210516 파일을 찾을 수 없어 발생된 이슈입니다. 보통 libubox 라이브러리는 OpenWRT 핵심 라이브러리 중에 하나인데요, 어떠한 이유인지 모르겠지만 아마 아래의 이유 중 하나일 것입니다.

  • 미꾸라지 /opt/mudfish-pi/2.1.26/bin/mudfish 바이너리가 잘못된 dependency 로 연결되어 컴파일이 된 경우이거나,
  • 혹은 정말 libubox.so.20210516 파일이 어떠한 이유로 router 펌웨어에서 사라졌거나 입니다.

혹시 다음과 같은 명령을 명령을 내렸을 때, 결과값이 어떻게 나오시는지요?

find / -name "libubox.*"

보통 이렇게 했을 때 OpenWRT 21.02 에서는 다음과 같이 결과가 나오는 것이 보통입니다.

# find / -name "libubox.*"
/lib/libubox.so.20210516
#

OpenWRT 22.03 버전을 사용하시는데, 먼가 다른 상위 버전을 사용하고 계신 것이 아닌가 걱정 스럽습니다. ㅠ.ㅠ

root@OpenWrt:~# find / -name "libubox.*"
/lib/libubox.so.20220515
/rom/lib/libubox.so.20220515

OpenWRT 공식 사이트에서 Firmware Selector로 받은 22.03 공식 이미지를 사용하고 있습니다.
더 최신버전이라서 아마 이걸 인식을 못하는것 같고 아무래도 이게 원인인것 같은데…ㅠㅠ 이건 또 어떻게 해결해야할지 모르겠네요.

https://downloads.openwrt.org/releases/21.02.1/packages/mips_24kc/base/libubox20210516_2021-05-16-b14c4688-2_mips_24kc.ipk

root@OpenWrt:~# find / -name "libubox.*"
/lib/libubox.so.20220515
/lib/libubox.so.20210516
/overlay/upper/lib/libubox.so.20210516
/rom/lib/libubox.so.20220515

일단 해당 패키지를 openwrt 공식 21.02 repository에서 찾아 설치해주니 프로세스가 더이상 꺼지지는 않습니다. Full VPN도 작동하는듯 싶은데요

Fri, 22 Jul 2022 07:53:42 GMT [1.546998] msk0: MUDEC_00137: ODR_writev() error: ODR_EIO

이 오류가 뜨네요. 19.07때는 이 오류가 떠도(첫 스레드에서 MUDEC_00179 오류는 잘못 기억하던것 같습니다) 정상 작동했고, 한글 docs에는 해당 오류가 기입되지 않았지만 영문 docs에는 해당 오류가 기입되어있어 내용을 확인했더니 무시해도 되는 오류라 작성되어있어 무시하고 사용했지만 지금은 Full VPN이 정상작동하지 않고 인터넷이 연결되지 않은것처럼 되네요… ㅠㅠ

Full VPN 작동중 mudrun_stdout.txt 로그 첨부합니다.

#      0.06 run  Checking the WAN network reachable to 14.63.223.218:443 (count 0).
#      0.06 run  Good.  Reached to the WAN network (14.63.223.218:443).
#      0.07 httpd Listening 192.168.1.1:8282
#      0.08 run  Skipped to launch the default browser to 192.168.1.1:8282
#     55.38 run  Killing mudflow process
#     55.38 run  Killing mudfish process
#     55.38 httpd ODR_unlink('.mudfish.vsm') failed: ret -1 errno 2
#     55.38 httpd ODR_unlink('.mudflow.vsm') failed: ret -1 errno 2
#     57.92 run  Trying to launch mudflow
#     57.92 run  Launched mudflow
#     57.92 run  Trying to launch mudfish
#     57.92 run  Launched mudfish
#     58.00 shmc Starts the mudfish VSM dispatcher.
#     60.06 shmc Reports the mudfish log error messages.
#     77.69 run  Killing mudflow process
#     77.69 run  Sent SIGTERM signal to process 19106
#     77.69 run  Killing mudfish process
#     77.70 run  Sent SIGTERM signal to process 19108
#     77.71 shmc Restart the mudflow VSM dispatcher.
#     77.74 shmc Restart the mudfish VSM dispatcher.
#     78.31 shmc Restart the mudfish VSM statistics.
#     80.44 run  Trying to launch mudflow
#     80.44 run  Launched mudflow
#     80.44 run  Trying to launch mudfish
#     80.44 run  Launched mudfish
#     80.55 shmc Starts the mudfish VSM dispatcher.
#     90.32 shmc Reports the mudfish log error messages.
#    110.81 run  Killing mudflow process
#    110.81 run  Sent SIGTERM signal to process 20025
#    110.81 run  Killing mudfish process
#    110.82 run  Sent SIGTERM signal to process 20027
#    110.84 shmc Restart the mudflow VSM dispatcher.
#    110.90 shmc Restart the mudfish VSM dispatcher.
#    111.02 shmc Restart the mudfish VSM statistics.
#    116.75 run  Trying to launch mudflow
#    116.75 run  Launched mudflow
#    116.75 run  Trying to launch mudfish
#    116.75 run  Launched mudfish
#    116.82 shmc Starts the mudfish VSM dispatcher.
#    120.63 shmc Reports the mudfish log error messages.

음… 저런… 보여주신 것으로 봐서는, 미꾸라지 바이너리가 OpenWrt 21.02 기준으로 컴파일이 된 듯 보입니다… 우선 현 상황에서 선택할 수 있는 부분은 아래와 같아 보입니다.

  • 라우터의 펌웨어를 OpenWrt 21.02 로 re-imaging 을 하신 후 다시 처음부터 진행을 하시거나,
  • 혹은 제가 미꾸라지 바이너리를 OpenWrt 22.03 에 맞게 다시 컴파일하는 것입니다.

참고로 제가 OpenWrt 22.03 기준으로 미꾸라지 바이너리를 현재 컴파일을 하고 있습니다. 큰 문제가 없다면 2 ~ 3일 이내로 바이너리를 이용하실 수 있지 않을까 예상이 되네요. 참고 바랍니다.

감사합니다 ㅠㅠ 바이너리 컴파일 이후 설치해보고 문제있으면 다시 남기겠습니다

:slight_smile: 알겠습니다. Index of /releases/openwrt/packages-22.03/ 에 조금씩 build 가 되고 있긴 한데, 빌드 과정에서 예상외의 오류가 발생되어서 진도가 느립니다.

더군다나 1 개의 architecture 를 위한 빌드가 4 ~ 5 시간씩 걸리는 상태라, mips24kc 를 위한 빌드는 조금 더 기다리셔야 합니다. ㅠ.ㅠ 중간에 다른 오류를 만나지 않는다는 가정하이니 참고 바랍니다.

아이고 아닙니다 ㅠㅠ 빌드해주신다는것만으로도 감사하죠 ㅎㅎ 뭐… 안되면 21.02가 아니라 그냥 아예 19.07로 내릴까 싶습니다. 21.02는 이래저래 할 일이 많아져서…

아… 또 이러네요…ㅠㅠ 이쯤되면 그냥 공유기가 안맞나봅니다 ㅠㅠㅠ

증상은 다시 저번처럼 로그인 후에 Core 로딩이 안되고 바로 로그아웃되는 증상입니다.

#      0.01 run  Good.  Reached to the WAN network (14.63.223.218:443).
#      0.02 httpd Listening 192.168.1.1:8282
#      0.02 run  Skipped to launch the default browser to 192.168.1.1:8282
#     53.42 run  Killing mudflow process
#     53.42 run  Killing mudfish process
#     53.42 httpd ODR_unlink('.mudfish.vsm') failed: ret -1 errno 2
#     53.42 httpd ODR_unlink('.mudflow.vsm') failed: ret -1 errno 2
#     55.22 run  Trying to launch mudflow
#     55.22 run  Launched mudflow
#     55.22 run  Trying to launch mudfish
#     55.23 run  Launched mudfish
----  56.03 run  mudfish process isn't found. Crash? Exits the launcher.

-mudrun_stdout.txt

저번에 터미널에서 직접 한번 켜보라고 하셔서 켜봅니다.

root@OpenWrt:~# /opt/mudfish-pi/2.1.26/bin/mudfish -u "Restric6502" -p "(비밀번호)" -f -s 37
Thu, 28 Jul 2022 15:35:33 GMT [1659022533.899845] [CRIT] Assert (sizeof(time_t) == 4) failed at ODR_libinit (./mud/os/linux/syscalls.c:1961) with 0 (errno 0)
[1659022533.900416] VSL:246 [CRIT] too earlier ODR_malloc(3)
Aborted

라는 오류를 내면서 안먹히네요. 설정중에 살짝 꼬인거 있어서 새로 할겸 다시 22.03 재설치 후에 했습니다…ㅠㅠ

만약 안되신다면 그냥 19.07로 내려서 쓰도록 하겠습니다 ㅠㅠ

@Restric6502 혹시 기회가 되신다면 Index of /releases/openwrt/packages-22.03/ 에서 OpenWRT 22.03 용 바이너리로 테스트를 해보시겠어요?

그리고 아래와 같이 다시 한번 더 직접 테스트를 해보시기 바랍니다. Assert (sizeof(time_t) == 4) 이슈가 난다는 것은 애초에 먼가 컴파일 부터가 제대로 잘못되었음을 뜻합니다. ㅠ.ㅠ

`/opt/mudfish-pi/2.1.26/bin/mudfish -u "Restric6502" -p "(비밀번호)" -f -s 37`
root@OpenWrt:~# /opt/mudfish-pi/2.1.26/bin/mudfish -u "Restric6502" -p "(비밀번호)" -f -s 37
Sun, 31 Jul 2022 16:34:54 GMT [1659285294.775261] [CRIT] Assert (sizeof(time_t) == 4) failed at ODR_libinit (./mud/os/linux/syscalls.c:1961) with 0 (errno 0)
[1659285294.775831] VSL:246 [CRIT] too earlier ODR_malloc(3)
Aborted

네. 위에 테스트할때도 22.03용 바이너리였고 지금 다시 22.03용 바이너리를 재설치하고 실험해도 동일합니다… 복잡하네요 아이고…

혹시 가능하시다면 Index of /releases/openwrt/packages-22.03/ 에서 다시 미꾸라지 패키지를 다운로드 받아 설치해 보시겠어요?

우선 OpenWRT 의 architecture 정보를 보니, ar71xxath79 로 변경이 되었다고 하는데, 이로 인한 이슈인지 확실치 않지만 다시 패키지를 빌드해 보았습니다.

만약 다시 시도를 해보아도 동일하게 Assert (sizeof(time_t) == 4) failed at ODR_libinit 오류가 난다면 아예 잘못된 build 를 사용하고 계실 확률이 높습니다. 그 경우 다음의 명령의 정보를 보여주시면 좀 더 도움이 될 듯 합니다.

# ubus call system board

네. ar71xx 타겟이 19.07을 마지막으로 제거되고 ath79로 통합된것으로 알고있습니다.

root@OpenWrt:~# /opt/mudfish-pi/2.1.26/bin/mudfish -u "Restric6502" -p "(비밀번호)" -f -s 37
Wed, 03 Aug 2022 16:10:32 GMT [1659543032.956035] [CRIT] Assert (sizeof(time_t) == 4) failed at ODR_libinit (./mud/os/linux/syscalls.c:1961) with 0 (errno 0)
[1659543032.957120] VSL:246 [CRIT] too earlier ODR_malloc(3)
Aborted

결국 여기서도 동일한 오류가 나네요 ㅠㅠ(다시 재설치 했습니다.)

root@OpenWrt:~# ubus call system board
{
        "kernel": "5.10.127",
        "hostname": "OpenWrt",
        "system": "Qualcomm Atheros QCA9558 ver 1 rev 0",
        "model": "Dongwon T&I DW02-412H (128M)",
        "board_name": "dongwon,dw02-412h-128m",
        "rootfs_type": "squashfs",
        "release": {
                "distribution": "OpenWrt",
                "version": "22.03.0-rc5",
                "revision": "r19523-bfd070e7fa",
                "target": "ath79/nand",
                "description": "OpenWrt 22.03.0-rc5 r19523-bfd070e7fa"
        }
}

정보는 이렇습니다. OpenWRT 공식 빌드라서 오류 가능성은 적을거라고 생각했는데 이렇게 발목잡을줄은… ㅠㅠ

혹시 Index of /releases/openwrt/packages-22.03/ 링크에서 다시 패키지를 다운로드 받으셔서 시도해 보시겠어요?

Assert (sizeof(time_t) == 4) failed 이슈와 관련된 부분은 제가 제거를 하여, 만약 다시 이슈가 발생된다면 먼가 다른 이슈가 발생되실 것입니다. ㅠ.ㅠ 즉, 제가 테스트를 하지 못하는 상황이기 때문에 문제 해결이 되었다고 말씀드리기가 힘든 점 양해 바랍니다.