OpenWrt 21.02.2 記錄: PPPoE, Wireguard


OpenWrt 21.02

OpenWrt 21.02.2 是 OpenWrt 當前最新的穩定版, 內核 5.4.179, 這個內核已經內置了 Wireguard 模塊

root@OpenWrt:~# uname -a
Linux Timecloud2 5.4.179 #0 SMP Wed Feb 16 20:29:10 2022 mips GNU/Linux
root@OpenWrt:~# lsmod|grep wireguard
ip6_udp_tunnel          1760  1 wireguard
libblake2s              1760  1 wireguard
libchacha20poly1305     4320  1 wireguard
libcurve25519_generic   10368  1 wireguard
udp_tunnel              2560  1 wireguard
wireguard              49168  0 

固件寫入

對於從舊版本(<=19.xx)升級的設備,

  • 刷 Kernel 包, 沒有luci界面, 只有最小軟件集
  • 刷 Sysupgrade 包, 帶luci, 如果不刷 Kernel 直接刷 Sysupgrade , 可能會無法啟動, 這種情況先刷一次 Kernel 就好了

Kernel包只需要刷入一次, 之后升級只需要刷 Sysupgrade 包. 下載固件時, 建議通過 https://firmware-selector.openwrt.org/ 這個界面搜索型號下載, 因為這里會同時提供Kernel和Upgrade的固件, 比較方便.

啟動后, 會進行文件系統的初始化, 通過 mount_root 這個腳本將spi flash 掛載到文件系統,

  • 在 mount_root 執行完成之前, 通過 df -h 看到的文件系統是臨時的(你會看到一些和路由器內存容量相近的分區), 這時候如果設置了配置並重啟路由器, 配置會丟失, 並且重啟后ssh登錄會發現key變了. 這時候運行reboot會卡住, 不能重啟.
  • 當這個腳本執行完畢之后, 通過 df -h 看到的文件系統就能看到和flash大小相近的分區, 這時候做配置才能持久化, 並且reboot也正常工作了

設備運行

MT7621

測試了 NeWiFi D1, D2, 迅雷 Timecloud, 運行正常無壓力.

MT7620

MT7620方案測試了極路由的極貳, 初始固件下運行速度正常, 但是安裝 block mount 之后, 通過ping上游觀察到的延遲增長很大, 經常會達到數百毫秒

命令行安裝配置 Wireguard

因為 Wireguard 配置相對簡單, 而命令行也直接易懂, 可以不需要界面輔助

安裝

# Install packages
opkg update
# 21.02 or above
opkg install wireguard-tools

配置wg(客戶端)

下面的場景適用於已經配置了帶外網IP的WG節點, 在LAN內配置WG節點連接到外網, 用於內網融合或內網穿透.
創建密鑰

root@OpenWrt:/etc# wg genkey
kGLk+qcgYXVlu8hkSpj0DegQB4BlLW71e8eLiJdVJFY=
root@OpenWrt:/etc# echo "kGLk+qcgYXVlu8hkSpj0DegQB4BlLW71e8eLiJdVJFY="|wg pubkey
5R3mGHTm6FPzKutJf8X0Zfd7VKLPxc+J8suzGiKZX0I=

在 /etc/config/network 下添加配置

config interface 'wg0'
	option proto 'wireguard'
	option private_key '=====LAN WG=======私======鑰='
	option listen_port '50055'
	list addresses '10.233.0.17/32'

config wireguard_wg0 'wgserver'
	option public_key '=====外網WG=======公=======鑰='
	option endpoint_host '123.234.123.210'
	option endpoint_port '50055'
	option persistent_keepalive '25'
	option route_allowed_ips '1'
	list allowed_ips '10.233.0.0/24'
	list allowed_ips '192.168.255.0/24'

以上的修改也可以通過uci命令完成

# Configure network
uci -q delete network.wg0
uci set network.wg0="interface"
uci set network.wg0.proto="wireguard"
uci set network.wg0.private_key="${WG_KEY}"
uci set network.wg0.listen_port="${WG_PORT}"
uci add_list network.wg0.addresses="${WG_ADDR}"
uci add_list network.wg0.addresses="${WG_ADDR6}"
 
# Add VPN peers
uci -q delete network.wgclient
uci set network.wgclient="wireguard_wg0"
uci set network.wgclient.public_key="${WG_PUB}"
uci set network.wgclient.preshared_key="${WG_PSK}"
uci add_list network.wgclient.allowed_ips="${WG_ADDR%.*}.2/32"
uci add_list network.wgclient.allowed_ips="${WG_ADDR6%:*}:2/128"
uci commit network

重啟network

/etc/init.d/network restart

查看wireguard狀態

wg show

開啟轉發

編輯 /etc/config/firewall, 在 config zone 下添加 list network 'wg0'option masq 1

  • 將wg0添加到LAN zone, 如果不添加, 那么wg0就不能與br-lan的機器forward, 隧道兩端的節點, br-lan的機器無法通過這個wg0去連接另一端隧道外的機器
  • 打開lan zone的 MASQUERADE (默認只在wan上開啟), 這樣就能實現從 wg0 到 br-lan 之間的轉發, 否則隧道內的機器無法與br-lan的機器通信
config zone
	option name		lan
	list   network		'lan'
	list   network		'wg0'   <----- 添加這行
	option input		ACCEPT
	option output		ACCEPT
	option forward		ACCEPT
        option masq             1       <----- 添加這行

然后重啟firewall

/etc/init.d/firewall restart

問題解決

錯誤 /etc/config/luci seems to be corrupt, unable to find section 'main'

當連接數較大時, 如果去實時統計里查看連接, 會出現上面的錯誤, 導致luci頁面完全失效. 這時候重啟 rpcd 可以恢復

/etc/init.d/rpcd restart

PPPOE 撥號容易掉線問題

PPPOE撥號時, OpenWrt 默認會將 MTU 設置為 1492, 這個配置對於寬帶服務商設備的設置而言可能還是太大, 在訪問量較大(例如觀看視頻時), 容易被上游設備封鎖, 導致掉線. 建議通過ping測試實際的 MTU.

先通過tracert得到路由器的直接上級設備的IP, 下面的202.38.64.1是中科大的ns, 這個隨便換成一個別的公網IP都行, 注意執行測試的電腦要直接連到這個路由器上

C:\Users\milton>tracert -d 202.38.64.1
Tracing route to 202.38.64.1 over a maximum of 30 hops
  1     2 ms     1 ms     1 ms  192.168.6.1
  2    33 ms     5 ms     4 ms  42.12.64.1
  3     5 ms     5 ms     4 ms  218.221.245.21

PING 測試

關於 DF(Don't Fragment)標志

用來確定到達目的地的路徑中最大傳輸單元 MTU 的大小, 通過在IP報頭中設置不分片DF(Don't Fragment)標志來探測路徑中的MTU值, 如果路徑中設備的 MTU 值小於此報文長度, 並且發現DF標志, 就會發回一個Internet控制消息協議(ICMP)(類型3、代碼4需要分片的消息ICMP_FRAG_NEEDED), 消息中包含它可接受的MTU值.

因為路由器IP是192.168.6.1, 其上級IP就是42.12.64.1, 需要對其檢測 MTU , 首先確認路由器上沒有做MTU限制(或者設置成1500)避免影響, 然后執行ping命令

# windows
ping -f -l 1436 42.12.64.1
# linux
ping -M do -s 1436 42.12.64.1

找到能得到正常的ping回顯且不出現 DF fragmented 提示的最大的size, 在其基礎上加28, 設置到 PPPOE 的 Advanced 選項中.

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM