★ 需求
1 只有一个ip,怎么让多台电脑上网?
只讲一下主机是双网卡的时候怎么解决。windows下面可以使用winroute、wingate或者系统自带的共享网络连接的功能,都可以实现共享上网。linux下面使用iptables一句话就可以实现。
至于主机是单网卡怎么解决,自己研究研究吧。我只在win下面尝试过用wingate,可是及其不稳定。
2 怎么将某个端口映射给内网?
内网某台电脑提供了服务,怎么让外网的用户可以访问呢?某些对外的服务可能会在内网的多台电脑上面提供,这时就需要做端口映射来让这些服务器让外网可以访问。
★ 解决方法
1 共享上网
1) 按照下图连接电脑。
isp
|
gw(用来做网关的电脑,双网卡)
|
hub(or switch)
|
---------------------------
| | ........ | |
pc1 pc2 ...... pcx pcy
gw一个网卡接isp,ip设置为isp告诉你的。另外一个网卡接hub,ip设置为一个内网ip,例如192.168.0.1。
2) 在gw上面执行如下脚本。
#------------script start--------
#!/bin/sh
IPT="/sbin/iptables"
# Internet Interface
INET_IFACE="ethx"
INET_ADDRESS="x.x.x.x"
# Local Interface Information
LOCAL_IFACE="ethy"
LOCAL_IP="192.168.0.1"
LOCAL_NET="192.168.0.0/24"
LOCAL_BCAST="192.168.0.255"
#修改从外网网卡出去的包的源地址,好让外网返回的包能正确回来。
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_ADDRESS
#打开系统的转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward
#----------script end----------
这样内网的电脑做如下设置后就应该可以上网了。
ip: 192.168.0.x
网关: 192.168.0.1
dns: 和gw的设置一样
这时的服务器已经具备一个网关的功能,不过内网的电脑想要上网,都必须手动设置ip,想做到自动获取,可以
2 端口映射
端口映射需要做的其实就是修改对方发过来包的目的地址和端口,然后帮忙转发一下,并且转发的同时修改一下源地址,好让被转发的电脑认为是gw发的包,处理完毕之后好能正常返回gw,然后由gw在负责转发给外网的ip。端口转发需要用到iptables的nat表,上面这些操作是在PREROUTING和POSTROUTING链之间完成的。
1) 映射到外网ip
整个过程可以参考下图。
eth0(外网网卡)
________________________
| |
gw的80端口 修改目标地址(DNAT) 修改源地址(SNAT)
外网ip---------->PREROUTING------------>POSTROUTING------------>外网ip
所以,例如我们要将对gw 80端口的访问都转发到外网的202.202.202.202这台电脑上面,只需要在上面的脚本中添加下面的语句即可。
# 修改从外网进来的对80端口访问的数据包的目的地址
$IPT -t nat -A PREROUTING -p tcp -i $INET_IFACE --destination-port 80 \
-j DNAT --to-destination 202.202.202.202
那么,你可能要问,按照上面的说法,这样只修改了目的地址,还要修改源地址啊,这样包才能正确返回到gw。问的好,不过其实我们已经做了这个设置了,聪明的你可能已经想到了,就是上面让内网ip可以上网的那个脚本里的一句语句已经实现了这个功能。
#修改从外网网卡出去的包的源地址,好让外网返回的包能正确回来。
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_ADDRESS
就是上面这句,他把所有从外网网卡出去的包的源地址都修改了,当然也包括去往202.202.202.202的80端口的包。
2) 映射到内网ip
整个过程可以参考下图。
eth0(外网网卡) eth0(内网网卡)
________________________ _______________________
| | | |
gw的80端口 修改目标地址(DNAT) 修改源地址(SNAT) 修改源地址(SNAT)
外网ip---------->PREROUTING------------>POSTROUTING------------>PREROUTING----------->POSTROUTING----------->内网ip
所以,例如我们要映射80端口到内网的192.168.1.80这台电脑上面,只需要在上面的脚本中添加下面的语句即可。
# 修改从外网进来的对80端口访问的数据包的目的地址
$IPT -t nat -A PREROUTING -p tcp -i $INET_IFACE --destination-port 80 \
-j DNAT --to-destination 192.168.1.80
# 修改从内网网卡出去的所有数据包源地址
$IPT -t nat -A POSTROUTING -o $LOCAL_IFACE \
-j SNAT --to-source $LOCAL_IP
这个比上面多了一句,意思相信你已经明白了吧。因为访问内网ip的时候走了内网网卡,所以还需要对从内网网卡出去的包修改一下源地址。
1 只有一个ip,怎么让多台电脑上网?
只讲一下主机是双网卡的时候怎么解决。windows下面可以使用winroute、wingate或者系统自带的共享网络连接的功能,都可以实现共享上网。linux下面使用iptables一句话就可以实现。
至于主机是单网卡怎么解决,自己研究研究吧。我只在win下面尝试过用wingate,可是及其不稳定。
2 怎么将某个端口映射给内网?
内网某台电脑提供了服务,怎么让外网的用户可以访问呢?某些对外的服务可能会在内网的多台电脑上面提供,这时就需要做端口映射来让这些服务器让外网可以访问。
★ 解决方法
1 共享上网
1) 按照下图连接电脑。
isp
|
gw(用来做网关的电脑,双网卡)
|
hub(or switch)
|
---------------------------
| | ........ | |
pc1 pc2 ...... pcx pcy
gw一个网卡接isp,ip设置为isp告诉你的。另外一个网卡接hub,ip设置为一个内网ip,例如192.168.0.1。
2) 在gw上面执行如下脚本。
#------------script start--------
#!/bin/sh
IPT="/sbin/iptables"
# Internet Interface
INET_IFACE="ethx"
INET_ADDRESS="x.x.x.x"
# Local Interface Information
LOCAL_IFACE="ethy"
LOCAL_IP="192.168.0.1"
LOCAL_NET="192.168.0.0/24"
LOCAL_BCAST="192.168.0.255"
#修改从外网网卡出去的包的源地址,好让外网返回的包能正确回来。
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_ADDRESS
#打开系统的转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward
#----------script end----------
这样内网的电脑做如下设置后就应该可以上网了。
ip: 192.168.0.x
网关: 192.168.0.1
dns: 和gw的设置一样
这时的服务器已经具备一个网关的功能,不过内网的电脑想要上网,都必须手动设置ip,想做到自动获取,可以
2 端口映射
端口映射需要做的其实就是修改对方发过来包的目的地址和端口,然后帮忙转发一下,并且转发的同时修改一下源地址,好让被转发的电脑认为是gw发的包,处理完毕之后好能正常返回gw,然后由gw在负责转发给外网的ip。端口转发需要用到iptables的nat表,上面这些操作是在PREROUTING和POSTROUTING链之间完成的。
1) 映射到外网ip
整个过程可以参考下图。
eth0(外网网卡)
________________________
| |
gw的80端口 修改目标地址(DNAT) 修改源地址(SNAT)
外网ip---------->PREROUTING------------>POSTROUTING------------>外网ip
所以,例如我们要将对gw 80端口的访问都转发到外网的202.202.202.202这台电脑上面,只需要在上面的脚本中添加下面的语句即可。
# 修改从外网进来的对80端口访问的数据包的目的地址
$IPT -t nat -A PREROUTING -p tcp -i $INET_IFACE --destination-port 80 \
-j DNAT --to-destination 202.202.202.202
那么,你可能要问,按照上面的说法,这样只修改了目的地址,还要修改源地址啊,这样包才能正确返回到gw。问的好,不过其实我们已经做了这个设置了,聪明的你可能已经想到了,就是上面让内网ip可以上网的那个脚本里的一句语句已经实现了这个功能。
#修改从外网网卡出去的包的源地址,好让外网返回的包能正确回来。
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_ADDRESS
就是上面这句,他把所有从外网网卡出去的包的源地址都修改了,当然也包括去往202.202.202.202的80端口的包。
2) 映射到内网ip
整个过程可以参考下图。
eth0(外网网卡) eth0(内网网卡)
________________________ _______________________
| | | |
gw的80端口 修改目标地址(DNAT) 修改源地址(SNAT) 修改源地址(SNAT)
外网ip---------->PREROUTING------------>POSTROUTING------------>PREROUTING----------->POSTROUTING----------->内网ip
所以,例如我们要映射80端口到内网的192.168.1.80这台电脑上面,只需要在上面的脚本中添加下面的语句即可。
# 修改从外网进来的对80端口访问的数据包的目的地址
$IPT -t nat -A PREROUTING -p tcp -i $INET_IFACE --destination-port 80 \
-j DNAT --to-destination 192.168.1.80
# 修改从内网网卡出去的所有数据包源地址
$IPT -t nat -A POSTROUTING -o $LOCAL_IFACE \
-j SNAT --to-source $LOCAL_IP
这个比上面多了一句,意思相信你已经明白了吧。因为访问内网ip的时候走了内网网卡,所以还需要对从内网网卡出去的包修改一下源地址。