2025-12-27

把wireguard vpn server當跳版,連到cisco vpn server

 假設有一台wireguard vpn server,上面有vpnc (cisco vpn client)連到了其它vpn,現在希望連到這台wireguard vpn server的client,也能同時走vpnc建立的介面路由,以連到 cisco vpn 網段,以下假設vpnc 建立的是tun0,wireguard建立的是wg0 (可用route查看),那麼就照以下步驟設定:

1.修改 /etc/sysctl.conf,允許封包在網卡介面互通:
net.ipv4.ip_forward=1
修改完再sudo sysctl -p

2.修改 /etc/wireguard/wg0.conf,在 [Interface] 區段加入:

# nat forward to tun 0
PostUp = iptables -A FORWARD -i wg0 -o tun0 -j ACCEPT
PostUp = iptables -A FORWARD -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

# clear nat rules
PostDown = iptables -D FORWARD -i wg0 -o tun0 -j ACCEPT
PostDown = iptables -D FORWARD -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o tun0 -j MASQUERADE

3.重啟wiregurad服務:
sudo systemctl restart wg-quick@wg0dh2

sudo wg-quick down wg0
sudo wg-quick up wg0

4.client設定檔的 [Peer] 區段加入允許的ip網段(用route查看tun0有哪些網段):
AllowedIPs = 10.0.0.0/24, 163.16.1.0/24
或懶惰點,改為全部允許:
AllowedIPs = 0.0.0.0/0, ::/0

5. 設定vpnc的systemd自啟動(假設設定檔已寫在/etc/vpnc/default.conf):
sudo vi /etc/systemd/system/vpnc.service
===================
[Unit]
Description=Cisco Compatible VPN Client (vpnc) - default profile
After=network.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/vpnc
ExecStop=/usr/sbin/vpnc-disconnect
RemainAfterExit=yes
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
====================
sudo systemctl daemon-reload
sudo systemctl enable vpnc.service
sudo systemctl start vpnc.service

6.讓wireguard在vpnc服務後再啟動:
sudo systemctl edit wg-quick@wg0
==============
[Unit]
After=vpnc.service
Wants=vpnc.service
==============
sudo systemctl daemon-reload
sudo systemctl restart wg-quick@wg0

7. 如果不想dns設定因vpnc連線而被修改,可禁止resolvconf去修改/etc/resolv.conf:
vi /etc/resolvconf.conf
================
# 禁止自動修改DNS設定
resolvconf=no
# 忽略tun0 (vpnc)的dns設定
interface=tun*

8.vpnc的/etc/vpnc/default.conf設定

IPSec secret <group shared key>
IPSec ID <group id>
IPSec gateway <vpn server ip>
Xauth username <user name>
Xauth password <user password>
IKE DH Group <default group, e.g. dh2>
IKE Authmode psk
# prevent connection break, check every 30s
DPD idle timeout (our side) 30

2025-12-19

Ubuntu/Linux Mint 的Cisco VPN (vpnc) 無法連線,出現認證雜湊為MD5不安全

若Cisco VPN Server是舊型的,認證(authentication)的雜湊算法只支援MD5,無法升級到SHA2,那麼在較新版Cisco VPN Client(vpnc)連線時可能會出現要你加入 --enable-weak-authentication 的參數(連線時用journalctl -f可看到),

但如果你用的是NetworkManager的network-manager-vpnc 套件,而不是直接用vpnc指令去連線,那麼也無法直接對指令加參數(因GUI介面也無該選項可勾選),即便修改 /etc/vpnc/default.conf也沒用(因為network-manager-vpnc不會讀取該檔),或修改 /etc/netplan/ 下面NetworkManager的vpnc設定檔也無法加入參數(因為沒有像extra args之類的參數能加),只能靠寫一個vpnc wrapper的shell script來解決:

cd /usr/sbin
sudo mv vpnc vpnc.orig
sudo vi vpnc
==========================
!/bin/bash

# Wrapper for vpnc to enable weak auth for legacy Cisco VPNs
# Original vpnc: /usr/sbin/vpnc.orig

if [[ "$*" == *"--nolaunch" ]]; then
    # Skip if it's a check from Network Manager
    exec /usr/sbin/vpnc.orig "$@"
else
    exec /usr/sbin/vpnc.orig --enable-weak-authentication "$@"
fi
===========================
sudo chmod +x vpnc

這樣在連線Cisco VPN時,就會強制加入該 --enable-weak-authentication 參數了。

2025-12-15

Linux Ubuntu 利用滑鼠側鍵

#安裝工具
 sudo apt install xbindkeys xdotool

#點擊滑鼠側鍵,通常是button 8 或 button 9
xev | grep button

#產生設定檔
xbindkeys --defaults > ~/.xbindkeysrc

#編輯.xbindkeysrc,範例如下:

#button 8 模擬中鍵
"xte 'mouseclick 2'"
b:8 + Release

#button 9 輸出字串
"xdotool type 123456"
b:9 + Release

#button 9 模擬 ctrl+c
"xdotool key ctrl+c"
b:9 + Release

#button  8 模擬 ctrl+v
"xdotool key ctrl+v"
b:8 + Release

#重啟 xbindkeys 載入設定,記得將xbindkeys加到開機啟動
killall xbindkeys && xbindkeys

2025-12-07

Nvidia 顯卡在 Linux Mint / Ubuntu 的 ucsi_ccg_init failed 問題

 dmesg -H -l err 出現以下訊息:

nvidia-gpu 0000:01:00.3: i2c timeout error e0000000
ucsi_ccg 1-0008: i2c_transfer failed -110
ucsi_ccg 1-0008: ucsi_ccg_init failed - -110

這是因為NVIDIA 驅動想透過 I2C 去跟 Type-C 控制晶片(CCG)溝通,但怎麼叫都沒反應,導致一直噴錯誤到 dmesg,這通常 不會影響顯示卡正常運作,只是 log 很醜、偶爾會吵醒系統(影響待機功耗),如果你根本不用 Type-C 充電(或卡上也沒vlink / usb-c DP),可以直接禁掉ucsi_cgg模組/aux i2c/i2c bus:

#方法一,直接關掉ucsi_ccg模組
echo "blacklist ucsi_ccg" | sudo tee /etc/modprobe.d/blacklist-ucsi_ccg.conf

#方法二,關掉aux i2c
echo 'options nvidia NVreg_EnableGpuAuxI2c=0' | sudo tee /etc/modprobe.d/nvidia-fix-i2c-timeout.conf

#方法三,關掉特定 bus
dmesg | grep -i ucsi_ccg #找出哪條噴錯,通常是i2c-10 或 i2c-8
echo 'options nvidia NVreg_RegistryDwords="RMDisableAuxBus=0x10"' | sudo tee /etc/modprobe.d/nvidia-fix-i2c-timeout.conf 

#ramfs update
sudo update-initramfs -u


2025-12-06

Macbook 2012 15" (A1286) 安裝Linux Mint 22 / Ubuntu 24.04

 要解決的問題跟以下這篇差不多:
https://duckfly-tw.blogspot.com/2023/09/macbook-13-2014-ubuntu.html

但還有其它問題:

1.因Macbook 2012 (A1286)有獨顯GT650M,需手動安裝nvidia-470驅動(支援GT650M的最後一版驅動),因上游驅動都變5XX系列了,ubuntu-drivers因顯卡太舊無法安裝驅動,沒安裝nvidia閉源驅動就只能用kernel內建的nouveau開源驅動,效率肯定低。

另外要特別注意的是,nvidia-driver-470只能支援到kernel 6.8.x,再上去dkms driver會無法被新的kernel載入!因此千萬別安裝6.8以上的kernel,即使裝了沒使用也不行(因為會破壞dkms tree造成其它kernel也無法正常運作),如果裝了6.8以上的kernel,務必要移除掉,並重建dkms tree:
sudo dkms autoinstall --all

# 先完全移除 nouveau(黑名單)
sudo rmmod nouveau (若出現無法缷載dkms,略過沒關係)
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nouveau.conf"
sudo update-initramfs -u

# 加 graphics-drivers PPA(專門放舊版驅動)
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-470

#加裝nvidia-prime nvidia-prime-applet,這樣tool panel才會有nvidia optimus面版可以調整
sudo apt install nvidia-prime nvidia-prime-applet

# 重開機
sudo reboot

# 正確結果會顯示:NVIDIA GeForce GT 650M/PCIe/SSE2  (不再是 NVE7)
glxinfo | grep "OpenGL renderer"


2. 電源管理,安裝下面這個applesmc-next dkms,以便能設定macbook的充電上限:https://github.com/c---/applesmc-next?tab=readme-ov-file
直接複製其bash script以sudo執行後,再複製45-apple的tlp script並重開機:
sudo cp /usr/src/applesmc-next-0.1.6/45-apple /usr/share/tlp/bat.d/

並修改/etc/tlp.conf:
START_CHARGE_THRESH_BAT0=30 #何時開始充電,可能無效
STOP_CHARGE_THRESH_BAT0=80 #何時停止充電

也可以修改以下檔案,設定何時開始充電
sudo echo 80 > /sys/class/power_supply/BAT0/charge_control_end_threshold

再用 tlp-stat -b 檢查設定狀態

或可安裝如Battery Health Charging(使用gnome桌面時)或Slimbook Battery來設定電池的充電上限。

3.原來有多接了一顆hfs+格式的sata硬碟,懶得重新格式化又想在linux上繼續用(預設read only,加force,rw變可讀寫)的話,使用以下選項在fstab掛載:
/dev/disk/by-uuid/<disk-uuid> /mnt/<mount-dir> auto nosuid,nodev,nofail,x-gvfs-show,force,rw 0 0

但如果有不正常關機,導致末正確卸載,檔案系統會標記為「dirty」,下次重新掛載時會強制掛載為唯讀(使用 dmesg | grep -i hfs 檢查),解決方法:

sudo apt install hfsprogs
sudo umount /dev/sdXX (先umount)
sudo fsck.hfsplus -f /dev/sdXX   # -f 強制檢查,即使是 journaled,有提示是否修復按y

4.dmesg出開以下錯誤訊息:
DMAR-IR: [Firmware Bug]: ioapic 2 has no mapping iommu, interrupt remapping will be disabled

#修改/etc/default/grub,修改開機選項
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash irqpoll intremap=off"


ref:
https://wiki.archlinux.org/title/MacBookPro8,x
https://askubuntu.com/questions/767850/firmware-bug-ioapic-2-has-no-mapping-iomm-after-kernel-update