我正在尝试通过接口建立数据呼叫rmnet_dataX
,该接口指的是通过插入的卡进行蜂窝连接,但这样做时遇到问题。我执行以下操作
ifconfig rmnet_data0 up
然后我静态分配一个IP
rmnet_data0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.246.68.132 Mask:255.0.0.0
UP RUNNING MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
在路由表中添加默认路径
ip ro add default via 10.246.68.132 dev rmnet_data0
添加 DNS 服务器
echo "nameserver 8.8.4.4" >> /etc/resolv.conf
设置 NAT 规则
iptables -t nat -D POSTROUTING -o rmnet_data0 -j MASQUERADE
路由表
netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 10.246.68.132 0.0.0.0 UG 0 0 0 rmnet_data0
10.0.0.0 * 255.0.0.0 U 0 0 0 rmnet_data0
192.168.225.0 * 255.255.255.0 U 0 0 0 bridge0
ping google.com // fails
另外,默认路径实际上只是表示到达网关 IP 的数据包被路由到外部网络,在这种情况下是网络数据吗?
鉴于此,NAT 规则真的需要吗?
答案1
好的,一些网络基础知识(请阅读详细信息,网上有大量资源):
路由表既适用于源自本机的数据包,也适用于从其他机器传入并转发的数据包(需要为此启用转发)。所以路由表是总是任何网络所必需的。
仅当 (1) 来自其他计算机的数据包转发到您的蜂窝网络,并且 (2) 您的蜂窝网络仅识别单个客户端(通常是这种情况)时,才需要网络地址转换 (NAT),并且您需要假装来自其他计算机的数据包来自此计算机,而不是来自其他计算机。
让它工作的步骤首先是让它在这台计算机上工作。如果您确实需要转发和 NAT,那就是第二步。所以最初没有防火墙规则。
您需要运行处理此特定接口的特定 DHCP 客户端。详细信息取决于您的系统; systemd、网络管理器或遗留样式配置等的配置都不同。找出您的系统上运行的内容,谷歌“使用 systemd 设置 DHCP”或类似内容。
对于 DHCP,通常在接口启动时触发 DHCP 客户端,然后 DHCP 客户端在接口上广播一条消息“你好,我是新来的,请给我一个 IP 地址和附加信息”。 DHCP 服务器应答该广播,并告诉您 IP、网关以及可能的更多信息。然后 DHCP 客户端程序使用此信息来设置 IP 地址、路由表等。有些蜂窝网络使用这种方式,有些则使用不同的方式。我不知道你的移动电话提供商是做什么的。