Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
mgqnfoqv7k2w
AutoBuildImmortalWrt
Commits
7edc9f73
Unverified
Commit
7edc9f73
authored
Jul 07, 2025
by
wukongdaily
Committed by
GitHub
Jul 07, 2025
Browse files
Update 99-custom.sh
parent
bda1187e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
113 additions
and
87 deletions
+113
-87
files/etc/uci-defaults/99-custom.sh
files/etc/uci-defaults/99-custom.sh
+113
-87
No files found.
files/etc/uci-defaults/99-custom.sh
View file @
7edc9f73
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
# 99-custom.sh 就是immortalwrt固件首次启动时运行的脚本 位于固件内的/etc/uci-defaults/99-custom.sh
# 99-custom.sh 就是immortalwrt固件首次启动时运行的脚本 位于固件内的/etc/uci-defaults/99-custom.sh
# Log file for debugging
# Log file for debugging
LOGFILE
=
"/tmp/uci-defaults-log.txt"
LOGFILE
=
"/tmp/uci-defaults-log.txt"
echo
"Starting 99-custom.sh at
$(
date
)
"
>>
$LOGFILE
echo
"Starting 99-custom.sh at
$(
date
)
"
>>
$LOGFILE
# 设置默认防火墙规则,方便虚拟机首次访问 WebUI
# 设置默认防火墙规则,方便虚拟机首次访问 WebUI
uci
set
firewall.@zone[1].input
=
'ACCEPT'
uci
set
firewall.@zone[1].input
=
'ACCEPT'
...
@@ -14,108 +14,134 @@ uci set "dhcp.@domain[-1].ip=203.107.6.88"
...
@@ -14,108 +14,134 @@ uci set "dhcp.@domain[-1].ip=203.107.6.88"
# 检查配置文件pppoe-settings是否存在 该文件由build.sh动态生成
# 检查配置文件pppoe-settings是否存在 该文件由build.sh动态生成
SETTINGS_FILE
=
"/etc/config/pppoe-settings"
SETTINGS_FILE
=
"/etc/config/pppoe-settings"
if
[
!
-f
"
$SETTINGS_FILE
"
]
;
then
if
[
!
-f
"
$SETTINGS_FILE
"
]
;
then
echo
"PPPoE settings file not found. Skipping."
>>
$LOGFILE
echo
"PPPoE settings file not found. Skipping."
>>
$LOGFILE
else
else
# 读取pppoe信息($enable_pppoe、$pppoe_account、$pppoe_password)
# 读取pppoe信息($enable_pppoe、$pppoe_account、$pppoe_password)
.
"
$SETTINGS_FILE
"
.
"
$SETTINGS_FILE
"
fi
fi
# 计算网卡数量
# 计算网卡数量
count
=
0
count
=
0
ifnames
=
""
ifnames
=
""
for
iface
in
/sys/class/net/
*
;
do
for
iface
in
/sys/class/net/
*
;
do
iface_name
=
$(
basename
"
$iface
"
)
iface_name
=
$(
basename
"
$iface
"
)
# 检查是否为物理网卡(排除回环设备和无线设备)
# 检查是否为物理网卡(排除回环设备和无线设备)
if
[
-e
"
$iface
/device"
]
&&
echo
"
$iface_name
"
|
grep
-Eq
'^eth|^en'
;
then
if
[
-e
"
$iface
/device"
]
&&
echo
"
$iface_name
"
|
grep
-Eq
'^eth|^en'
;
then
count
=
$((
count
+
1
))
count
=
$((
count
+
1
))
ifnames
=
"
$ifnames
$iface_name
"
ifnames
=
"
$ifnames
$iface_name
"
fi
fi
done
done
# 删除多余空格
# 删除多余空格
ifnames
=
$(
echo
"
$ifnames
"
|
awk
'{$1=$1};1'
)
ifnames
=
$(
echo
"
$ifnames
"
|
awk
'{$1=$1};1'
)
# 网络设置
# 网络设置
if
[
"
$count
"
-eq
1
]
;
then
if
[
"
$count
"
-eq
1
]
;
then
# 单网口设备 类似于NAS模式 动态获取ip模式 具体ip地址取决于上一级路由器给它分配的ip 也方便后续你使用web页面设置旁路由
# 单网口设备 类似于NAS模式 动态获取ip模式 具体ip地址取决于上一级路由器给它分配的ip 也方便后续你使用web页面设置旁路由
# 单网口设备 不支持修改ip 不要在此处修改ip
# 单网口设备 不支持修改ip 不要在此处修改ip
uci
set
network.lan.proto
=
'dhcp'
uci
set
network.lan.proto
=
'dhcp'
elif
[
"
$count
"
-gt
1
]
;
then
elif
[
"
$count
"
-gt
1
]
;
then
# 提取第一个接口作为WAN
# 提取第一个接口作为WAN
wan_ifname
=
$(
echo
"
$ifnames
"
|
awk
'{print $1}'
)
wan_ifname
=
$(
echo
"
$ifnames
"
|
awk
'{print $1}'
)
# 剩余接口保留给LAN
# 剩余接口保留给LAN
lan_ifnames
=
$(
echo
"
$ifnames
"
|
cut
-d
' '
-f2-
)
lan_ifnames
=
$(
echo
"
$ifnames
"
|
cut
-d
' '
-f2-
)
# 设置WAN接口基础配置
# 设置WAN接口基础配置
uci
set
network.wan
=
interface
uci
set
network.wan
=
interface
# 提取第一个接口作为WAN
# 提取第一个接口作为WAN
uci
set
network.wan.device
=
"
$wan_ifname
"
uci
set
network.wan.device
=
"
$wan_ifname
"
# WAN接口默认DHCP
# WAN接口默认DHCP
uci
set
network.wan.proto
=
'dhcp'
uci
set
network.wan.proto
=
'dhcp'
# 设置WAN6绑定网口eth0
# 设置WAN6绑定网口eth0
uci
set
network.wan6
=
interface
uci
set
network.wan6
=
interface
uci
set
network.wan6.device
=
"
$wan_ifname
"
uci
set
network.wan6.device
=
"
$wan_ifname
"
# 更新LAN接口成员
# 更新LAN接口成员
# 查找对应设备的section名称
# 查找对应设备的section名称
section
=
$(
uci show network |
awk
-F
'[.=]'
'/\.@?device\[\d+\]\.name=.br-lan.$/ {print $2; exit}'
)
section
=
$(
uci show network |
awk
-F
'[.=]'
'/\.@?device\[\d+\]\.name=.br-lan.$/ {print $2; exit}'
)
if
[
-z
"
$section
"
]
;
then
if
[
-z
"
$section
"
]
;
then
echo
"error:cannot find device 'br-lan'."
>>
$LOGFILE
echo
"error:cannot find device 'br-lan'."
>>
$LOGFILE
else
else
# 删除原来的ports列表
# 删除原来的ports列表
uci
-q
delete
"network.
$section
.ports"
uci
-q
delete
"network.
$section
.ports"
# 添加新的ports列表
# 添加新的ports列表
for
port
in
$lan_ifnames
;
do
for
port
in
$lan_ifnames
;
do
uci add_list
"network.
$section
.ports"
=
"
$port
"
uci add_list
"network.
$section
.ports"
=
"
$port
"
done
done
echo
"ports of device 'br-lan' are update."
>>
$LOGFILE
echo
"ports of device 'br-lan' are update."
>>
$LOGFILE
fi
fi
# LAN口设置静态IP
# LAN口设置静态IP
uci
set
network.lan.proto
=
'static'
uci
set
network.lan.proto
=
'static'
# 多网口设备 支持修改为别的ip地址,别的地址应该是网关地址,形如192.168.xx.1 项目说明里都强调过。
# 多网口设备 支持修改为别的ip地址,别的地址应该是网关地址,形如192.168.xx.1 项目说明里都强调过。
# 大家不能胡乱修改哦 比如有人修改为192.168.100.55 这是错误的理解 这个项目不能提前设置旁路地址
# 大家不能胡乱修改哦 比如有人修改为192.168.100.55 这是错误的理解 这个项目不能提前设置旁路地址
# 旁路的设置分2类情况,情况一是单网口的设备,默认是DHCP模式,ip应该在上一级路由器里查看。之后进入web页在设置旁路。
# 旁路的设置分2类情况,情况一是单网口的设备,默认是DHCP模式,ip应该在上一级路由器里查看。之后进入web页在设置旁路。
# 情况二旁路由如果是多网口设备,也应当用网关访问网页后,在自行在web网页里设置。总之大家不能直接在代码里修改旁路网关。千万不要徒增bug啦。
# 情况二旁路由如果是多网口设备,也应当用网关访问网页后,在自行在web网页里设置。总之大家不能直接在代码里修改旁路网关。千万不要徒增bug啦。
uci
set
network.lan.ipaddr
=
'192.168.100.1'
uci
set
network.lan.ipaddr
=
'192.168.100.1'
uci
set
network.lan.netmask
=
'255.255.255.0'
uci
set
network.lan.netmask
=
'255.255.255.0'
echo
"set 192.168.100.1 at
$(
date
)
"
>>
$LOGFILE
echo
"set 192.168.100.1 at
$(
date
)
"
>>
$LOGFILE
# 判断是否启用 PPPoE
# 判断是否启用 PPPoE
echo
"print enable_pppoe value===
$enable_pppoe
"
>>
$LOGFILE
echo
"print enable_pppoe value===
$enable_pppoe
"
>>
$LOGFILE
if
[
"
$enable_pppoe
"
=
"yes"
]
;
then
if
[
"
$enable_pppoe
"
=
"yes"
]
;
then
echo
"PPPoE is enabled at
$(
date
)
"
>>
$LOGFILE
echo
"PPPoE is enabled at
$(
date
)
"
>>
$LOGFILE
# 设置ipv4宽带拨号信息
# 设置ipv4宽带拨号信息
uci
set
network.wan.proto
=
'pppoe'
uci
set
network.wan.proto
=
'pppoe'
uci
set
network.wan.username
=
$pppoe_account
uci
set
network.wan.username
=
$pppoe_account
uci
set
network.wan.password
=
$pppoe_password
uci
set
network.wan.password
=
$pppoe_password
uci
set
network.wan.peerdns
=
'1'
uci
set
network.wan.peerdns
=
'1'
uci
set
network.wan.auto
=
'1'
uci
set
network.wan.auto
=
'1'
# 设置ipv6 默认不配置协议
# 设置ipv6 默认不配置协议
uci
set
network.wan6.proto
=
'none'
uci
set
network.wan6.proto
=
'none'
echo
"PPPoE configuration completed successfully."
>>
$LOGFILE
echo
"PPPoE configuration completed successfully."
>>
$LOGFILE
else
else
echo
"PPPoE is not enabled. Skipping configuration."
>>
$LOGFILE
echo
"PPPoE is not enabled. Skipping configuration."
>>
$LOGFILE
fi
fi
fi
fi
# 添加docker zone
# 若安装了dockerd 则设置docker的防火墙规则
uci add firewall zone
# 扩大docker涵盖的子网范围 '172.16.0.0/12'
uci
set
firewall.@zone[-1].name
=
'docker'
# 方便各类docker容器的端口顺利通过防火墙
uci
set
firewall.@zone[-1].input
=
'ACCEPT'
if
command
-v
dockerd
>
/dev/null 2>&1
;
then
uci
set
firewall.@zone[-1].output
=
'ACCEPT'
echo
"检测到 Docker,正在配置防火墙规则..."
uci
set
firewall.@zone[-1].forward
=
'ACCEPT'
FW_FILE
=
"/etc/config/firewall"
uci
set
firewall.@zone[-1].device
=
'docker0'
# 删除所有名为 docker 的 zone
# 添加 forwarding docker -> lan
uci delete firewall.docker
uci add firewall forwarding
uci
set
firewall.@forwarding[-1].src
=
'docker'
# 先获取所有 forwarding 索引,倒序排列删除
uci
set
firewall.@forwarding[-1].dest
=
'lan'
for
idx
in
$(
uci show firewall |
grep
"=forwarding"
|
cut
-d
[
-f2
|
cut
-d
]
-f1
|
sort
-rn
)
;
do
src
=
$(
uci get firewall.@forwarding[
$idx
]
.src 2>/dev/null
)
# 添加 forwarding docker -> wan
dest
=
$(
uci get firewall.@forwarding[
$idx
]
.dest 2>/dev/null
)
uci add firewall forwarding
echo
"Checking forwarding index
$idx
: src=
$src
dest=
$dest
"
uci
set
firewall.@forwarding[-1].src
=
'docker'
if
[
"
$src
"
=
"docker"
]
||
[
"
$dest
"
=
"docker"
]
;
then
uci
set
firewall.@forwarding[-1].dest
=
'wan'
echo
"Deleting forwarding @forwarding[
$idx
]"
uci delete firewall.@forwarding[
$idx
]
# 添加 forwarding lan -> docker
fi
uci add firewall forwarding
done
uci
set
firewall.@forwarding[-1].src
=
'lan'
# 提交删除
uci
set
firewall.@forwarding[-1].dest
=
'docker'
uci commit firewall
# 追加新的 zone + forwarding 配置
cat
<<
EOF
>>"
$FW_FILE
"
config zone 'docker'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option name 'docker'
list subnet '172.16.0.0/12'
config forwarding
option src 'docker'
option dest 'lan'
config forwarding
option src 'docker'
option dest 'wan'
config forwarding
option src 'lan'
option dest 'docker'
EOF
else
echo
"未检测到 Docker,跳过防火墙配置。"
fi
# 设置所有网口可访问网页终端
# 设置所有网口可访问网页终端
uci delete ttyd.@ttyd[0].interface
uci delete ttyd.@ttyd[0].interface
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment