Android系统中iptables的应用(三)NatController

个人邮箱:xiaokeweng@gmail.com  欢迎大家直接发邮件给我共同交流学习

      NatController这个模块支持android系统中网络共享功能,也可以勉强代称为网络地址转换(NAT:Network Address Translation),即在不同的网络接口设备之间搭建数据通路,互为上载出口,通过网络地址转换来实现数据包内部代理转发。例如,手机做无线热点hotspot,数据流量给其他通过wifi链接到本机的设备。从framework下发的可用Netdcmd只有一个:

 nat

 enable/disable<intiface><extiface>

(1)Netd.CommanderListener初始化后:
createChildChains(V4V6, "filter", "FORWARD", FILTER_FORWARD);                                                                   
createChildChains(V4, "mangle", "FORWARD", MANGLE_FORWARD);
createChildChains(V4, "nat", "POSTROUTING", NAT_POSTROUTING);
sNatCtrl->setupIptablesHooks(); 
nat表新增规则:
  -N natctrl_nat_POSTROUTING
  -A POSTROUTING -j natctrl_nat_POSTROUTING

filter表:
  -N natctrl_FORWARD
  -N natctrl_tether_counters
  -A FORWARD -j natctrl_FORWARD
  -A natctrl_FORWARD -j DROP


mangle表:
  -N natctrl_mangle_FORWARD
  -A FORWARD -j natctrl_mangle_FORWARD
  -A natctrl_mangle_FORWARD -p tcp -m tcp --tcp-flags SYN SYN -j TCPMSS –clamp-mss-to-pmtu

    重要的是最后一条规则,这条规则的意义是,使TCP的SYN包中的MSS字段,根据upstream的MTU自动调整,相互兼容,避免downstream的数据包因超过通路upstream的MTU而无法通过。关于MSS的计算,通常ipv4协议MSS=MTU减40(IP数据包包头20字节和TCP数据包头20字节)。

(2)开启设备的某一种数据共享后:本例中开启mtk的hotspot共享,iniface=ap0,extiface=ccmni1
    sNatCtrl->enableNat( [intiface] , [extiface] );
nat表新增规则:
  -A natctrl_nat_POSTROUTING -o ccmni1 -j MASQUERADE
使出口为ccmni1的数据包,按照ccmni1网络接口设备的当前ip进行自动进行dst address的nat

filter表新增规则:
  -A natctrl_FORWARD -i ccmni1 -o ap0 -m state --state RELATED,ESTABLISHED -g natctrl_tether_counters
  -A natctrl_FORWARD -i ap0 -o ccmni1 -m state --state INVALID -j DROP
  -A natctrl_FORWARD -i ap0 -o ccmni1 -g natctrl_tether_counters
  -A natctrl_tether_counters -i ap0 -o ccmni1 -j RETURN
  -A natctrl_tether_counters -i ccmni1 -o ap0 -j RETURN
在ap0与ccmni1之间建立一条nat通道,保证有效数据能够成功通过iface转发。

(3)关于jump target MASQUERADE的man手册
MASQUERADE
       This target is only valid in the nat table, in the POSTROUTING chain.  It should only be used with dynamically  assigned  IP (dialup) connections: if you have a static IP address, you should use the SNAT target.
       Masquerading is equivalent to specifying a mapping to the IP address of the interface the packet is  going out,  but  also  has  the effect that connections are forgotten when the interface goes down.  This is the correct behavior when the next dialup is unlikely to have the same interface address (and hence any established connections are lost anyway).

       --to-ports port[-port]

              This  specifies  a  range of source ports to use, overriding the default SNAT source port-selection heuristics (see above).  This is only valid if the rule also specifies -p tcp or -p udp.

       --random

              Randomize source port mapping If option --random is used then port mapping will be randomized (ker‐nel >= 2.6.21).
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iptables 是 Linux 系统的一个强大的防火墙工具,它可以用于过滤、重定向和修改网络数据包。它是一个基于内核的软件,可以对数据包进行过滤和修改,从而实现网络连接的控制和管理。在 Linux 系统iptables 是最常用的防火墙软件之一,它可以在多个层面上进行过滤和管理网络连接。以下是 iptables 在 Linux 系统的一些应用: 1. 防火墙:iptables 可以配置防火墙规则,保护系统免受来自外部网络的攻击。它可以限制不同网络之间的数据流量,并允许或阻止特定的端口和协议。 2. NATiptables 可以实现网络地址转换(NAT),它可以将私有 IP 地址转换为公共 IP 地址以实现 Internet 访问。通过 NAT,可以将多个设备连接到 Internet,而不需要每个设备都拥有公共 IP 地址。 3. 端口转发:iptables 可以将进入系统的数据包重定向到其他系统或端口。这是在服务器环境非常有用的,因为它可以将外部流量重定向到内部服务器。 4. 流量限制:iptables 可以限制流量,这对于限制恶意用户或应用程序的带宽使用非常有用。它可以限制连接的数量、速率和带宽,从而保证网络的稳定性和可靠性。 总之,iptables 是 Linux 系统非常有用的一个工具,可以用于保护网络安全、管理网络连接和实现网络地址转换等功能。它的功能非常强大,但也需要用户具备一定的技术水平和经验,才能正确配置和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值