使用NAT共享上网
家里有一个台式机,但是没有无线网卡,必须使用网线连接路由器,但路由器在客厅,扯很长的网线很不方便.不过,我还有一台笔记本,上面装的是LINUX,所以想办法让台式机通过笔记本的eth口访问网络,那么就需要在笔记本上搭建一个NAT转发.
在linux上,使用IPtables轻松搞定这一切.组网图大致如下:
第一种方法:
IPtable设置如下:
# all interface export WAN=wlan0 # 获取无线网口的IP地址 export WAN_IP=`ifconfig ${WAN} | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'` export LAN=eth0 # 获取路由器的地址 export REAL_GW=`route | grep default | awk '{print $2}'` # remove all # 清除NAT中的所有规则 iptables -t nat -F # NAT settings # 因为台式机(window)中的GW设置的是10.121.36.1,所以从笔记本上看LAN口收上来的包都是到10.121.36.1的, # 这里就需要DNAT生效了,本质上是把数据包的目的地址给改掉,然后进入路由系统查找出端口 # 那么,下面这句话就是把去10.121.36.1的数据包,修改成${REAL_GW},这里是192.168.1.1 # 原有数据包头: # SRC: 10.121.36.89 DST: 10.121.36.1 iptables -t nat -A PREROUTING -i ${LAN} -d 10.121.36.1 -j DNAT --to ${REAL_GW} # 经过上面一句话后,变成 # SRC: 10.121.36.89 DST:192.168.1.1 # 然后,进入route table,找出端口,在笔记本(linux)上,192.168.1.1是default gateway.且是wlan0 # 所以数据包从wlan0走. # 数据包终归要有ACK,如果192.168.1.1回应10.121.36.89这个地址的话,将找不到路由而在路由器上丢弃. # 那么下面这句话,将源地址修改${WAN_IP},这里是192.168.1.4 iptables -t nat -A POSTROUTING -o ${WAN} -s 10.121.36.0/24 -j SNAT --to ${WAN_IP} # 最终,出wlan0的数据包就是: # SRC: 192.168.1.4 DST: 192.168.1.1 数据包从wlan口回来的时候就执行反操作.把数据发送给台式机(windows).
OK,一切正常.我不需要更复杂的设置了,如果大家有兴趣,请参考<更安全的linux网络>这本书.
第二种方法:
iptables -t nat -A POSTROUTING -s 10.121.36.0/24 -j MASQUERADE
网友依云http://lilydjwg.is-programmer.com/提供.
快速参考:
刘苏平的博客 http://www.liusuping.com/ubuntu-linux/iptables-firewall-setting.html