使用NAT共享上网

imouse posted @ 2012年10月13日 22:15 in Linux with tags linux iptable DNAT SNAT , 2864 阅读

      家里有一个台式机,但是没有无线网卡,必须使用网线连接路由器,但路由器在客厅,扯很长的网线很不方便.不过,我还有一台笔记本,上面装的是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

Avatar_small
依云 说:
2012年10月13日 22:53

不是直接 iptables -t nat -A POSTROUTING -s 192.168.21.0/24 -j MASQUERADE 就可以了吗?

PS: 还需要开启 IPv4 转发,
sysctl -w net.ipv4.ip_forward=1
或者
echo 1 > /proc/sys/net/ipv4/ip_forward

Avatar_small
imouse 说:
2012年10月14日 01:37

多谢指教,呵呵.
起初我是想理解SNAT和DNAT的用法,MASQUERADE可以解决动态IP的问题.

Avatar_small
zaeneas 说:
2012年10月15日 03:01

求问如何学习iptables(几无网络知识的小白)
尝试看iptables的manpage,结果没有明白

Avatar_small
依云 说:
2012年10月15日 03:17

那个太长了,一般人很难看下去的。我都是道听途说的。

Avatar_small
zaeneas 说:
2012年10月15日 03:31

那么其原理或者是其操作对项之原理呢?

道听途说到命令但是不知道这个命令是干什么用的很不爽呀....

Avatar_small
imouse 说:
2012年10月21日 01:49

iptables可参考<更安全的linux网络>, 上面介绍的很清楚.可以到iask.sina.com.cn中找到电子版,也可以到当当上买.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter