原来 openSUSE 里的防火墙 SuSEfirewall2 并不会自动允许 UPnP 设置。所以一些软件,如 PT 软件 qBittorrent 就无法通过 UPnP 来告诉家庭路由器将外面来的连接请求转发给它,以至于别的 peer 无法连接到本机而造成不容易上传文件给别人。
很多家庭网络都使用路由器来共享宽带给家里的所有设备。这种情况下家里所有设备就组成了一个内网(局域网络,以区别于互联网),每台设备都有一个内部网络地址(IP,通常是以 192.168. 开头的 IP)。这个地址对外面的互联网上的用户来说是隐藏的。所以运行在某台设备上的软件如果需要外面的设备主动与之通信的话,就需要告诉路由器将这样的连接请求转发给它。自动完成这一匹配就可以通过 UPnP 协议。
举例:qBittorrent¶
这里以 qBittorrent 为例。在其设置(Tools -> Options,Alt+O)中的 Connection(连接)部分就有监听端口(Listening Port)的设置,这个端口只要不与设备的主要端口冲突就行。拿不准的话就使用旁边提供的 Random 按钮随机选择一个。该设置紧接着的下面一行就是可以勾选的“Use UPnP / NAT-PMP port forwarding from my router”。应用设置之后按理说 qBittorrent 应该就可以被别人连接了。
但是并不一定。因为 openSUSE 的防火墙默认并没有允许 UPnP / NAT-PMP 协议的通信,而且防火墙也并不会因为用户在 qBittorrent 中设置了监听端口就自动放行这个端口的入站通信。一贯的 Windows 式思维让我在这个问题上纠结了好久。正确的、进一步的设置如下。
图形界面¶
使用 openSUSE 提供的图形管理界面,
- 打开 YaST,按提示输入管理员(root)密码,
- 打开 Firewall,
- 在左边搜索 firewall,或者
- 从右边列表往下翻找到 Firewall
- 在 Firewall 配置界面的左边找到最下面的 Custom Rules,单击展开右边的界面,
- 在 Firewall Zone 那里选择 External Zone,
- 单击下面的 Add 以添加新的规则,要添加两组,
- 允许 UPnP / NAT-PMP 通信(ssdp),要添加的规则如下(假设局域网 IP 是以
192.168.1.
开头的),Source Network: 192.168.1.0/24 Protocol: UDP Destination Port (Optional): 1900 剩下的两个空留空。
填完后单击 Add 按钮完成添加;
- 添加刚才给 qBittorrent 设置的端口(假设是
56789
),规则如下(可以添加两次,第二次将 Protocol 改成 TCP),Source Network: 0/0 Protocol: UDP Destination Port (Optional): 56789 剩下的两个空留空。
填完后单击 Add 按钮完成添加;
- 允许 UPnP / NAT-PMP 通信(ssdp),要添加的规则如下(假设局域网 IP 是以
- 然后单击右下角的 Next 完成并更新防火墙规则,单击 Finish 以退出防火墙设置界面。
这样就算是完成了。以后有别的程序需要用 UPnP 的话就只需要仿照上面 5.B 设置该程序对应的端口即可。
命令行¶
编辑 SuSEfirewall2 配置文件¶
作为记录,如果要直接修改系统配置文件的话,需要编辑 /etc/sysconfig/SuSEfirewall2
文件,找到包含 FW_SERVICES_ACCEPT_EXT
的行,修改或添加对应的规则(一行一个),看起来如下所示,
FW_SERVICES_ACCEPT_EXT="192.168.1.0/24,udp,1900 0/0,udp,,56789 0/0,tcp,,56789"
保存后然后重启防火墙服务即可,
# rcSuSEfirewall2 restart
或者,
# systemctl restart SuSEfirewall2
直接使用 SuSEfirewall2 命令行¶
这一部分有待验证,可能不是太好用!
格式,
SuSEfirewall2 open <ZONE> <TYPE> <services...>
其中 ZONE 是 DMZ EXT INT 三者其中之一;而 TYPE 是 RPC IP UDP TCP 四者之一。
# SuSEfirewall2 open EXT UDP 1900 # SuSEfirewall2 open EXT UDP 56789 # SuSEfirewall2 open EXT TCP 56789 # systemctl restart SuSEfirewall2
近似于前面的修改。
# SuSEfirewall2 --help
可以显示更多关于 SuSEfirewall2 的指令。它其实是 SuSE 引入的 iptables 的一个前端交互界面,但是官方推荐普通用户使用 YaST 里面的 Firewall 来配置。因为通过这个命令行输入的指令不会反映到 Firewall 那个界面里面,不方便查看和修改、删除。
本文是水景一页投向 openSUSE Tumbleweed 后的系列经验总结之一。©
本文发表于水景一页。永久链接:<https://cnzhx.net/blog/opensuse-qbittorrent-incoming-connections/>。转载请保留此信息及相应链接。
引用通告: openSUSE Tumbleweed 初始配置记录 | 水景一页
引用通告: 在 openSUSE 上使用 KDE Connect 连通 Android 手机 | 水景一页
引用通告: openSUSE Linux 中的无线网络设置(全局) | 水景一页