Ubuntu多网卡路由配置问题:ifconfig无法同时显示多网卡,IPtables路由配置受阻
Hey Matthew, 我来帮你搞定这个多网卡路由的问题!先从你说的ifconfig看不到多个网卡的问题入手,再一步步配置IPtables路由。
第一步:解决多网卡无法同时显示的问题
首先得说,Ubuntu最新版里ifconfig其实已经是比较老旧的工具了,很多时候默认没装全,而且NetworkManager的默认行为可能会自动禁用未连接的网卡,导致你只能看到一个。咱们一步步来:
先确认硬件是否被系统识别
运行这个命令,能列出所有网卡设备,不管有没有启用:sudo lshw -C network看看输出里有没有你的WiFi USB适配器和USB转网口设备。如果状态是
UNCLAIMED,那可能是缺驱动;要是显示detected,那就是设备没激活,继续往下走。激活未启用的网卡
用NetworkManager的命令查看所有设备状态:nmcli device status你会看到哪些网卡是
disconnected状态,比如USB转网口通常是enx开头的名字,WiFi是wlan0之类的。然后手动激活它:sudo nmcli device connect enxXXXX # 把enxXXXX换成你的网卡名激活后别再用
ifconfig了,新版Ubuntu更推荐用ip addr show,这个肯定能看到所有已激活的网卡IP。要是你非要用ifconfig,先装一下工具包:sudo apt install net-tools
第二步:配置IPtables实现多网卡路由
解决了网卡显示问题,接下来要做路由转发,这得先开启IP转发,再配置IPtables规则:
开启IP转发功能
编辑系统配置文件:sudo nano /etc/sysctl.conf找到
net.ipv4.ip_forward=1这一行,把前面的#删掉,保存退出后执行命令让配置生效:sudo sysctl -p配置IPtables转发规则
假设你的内网网卡是enp0s3(内网口,比如连接内部网络的网卡),出口网卡是wlan0(WiFi USB适配器),规则如下:- 允许内网流量转发到出口网卡:
sudo iptables -A FORWARD -i enp0s3 -o wlan0 -j ACCEPT - 允许出口网卡返回的流量转发回内网:
sudo iptables -A FORWARD -i wlan0 -o enp0s3 -m state --state RELATED,ESTABLISHED -j ACCEPT - 配置SNAT(源地址转换),让内网设备能通过出口网卡访问外网:
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
如果你用USB转网口作为出口,把上面的
wlan0换成对应的网卡名就行。- 允许内网流量转发到出口网卡:
额外注意事项
- 别让NetworkManager自动修改路由:建议把内网网卡设置为手动IP,不要用DHCP自动获取,避免路由冲突。你可以在Ubuntu的图形设置里找到对应的网卡,手动分配IP、子网掩码,网关留空(内网口不需要网关)。
- 保存IPtables规则:重启后IPtables规则会消失,要是想永久保存,安装
iptables-persistent:
安装过程中会提示你保存当前规则,选Yes就行。sudo apt install iptables-persistent
这样操作下来,你的多网卡应该能正常显示,IPtables路由也能正常工作了!
备注:内容来源于stack exchange,提问作者Matthew

