A机器命令行添加IP(重启后会失效,如果想永久生效就配置文件)
给另一台B机器的内网网卡添加ip(ifconfig ens33 192.168.100.100/24)
两台机器的内网网卡可以互相ping通,此时A和B可以互相通信,但是A可以上网,B不可以上网。
A机器上打开路由转发 echo “1”>/proc/sys/net/ipv4/ip_forward。
这个文件的内容默认是0,要想使用nat表,网络的转发,就必须修改内核参数,所以需要把该文件内容改为1。
A上执行添加规则iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens37 -j MASQUERADE,这条规则就是让192.168.100.0这个网段可以上网
B机器上设置网关为192.168.100.1。命令:route add default gw 192.168.100.1。设置完后B机器可以ping通A机器的公网IP即ens37网卡的IP地址
给B机器设置DNS。编辑DNS配置文件/etc/resolv.conf。在配置文件中添加一行nameserver 119.29.29.29。保存退出后就可以上网了,如果不行,可以用命令:systemctl stop iptables关闭防火墙,因为防火墙会干扰。
需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口
A上打开路由转发echo “1”>/ proc/sys/net/ipv4/ip_forward,因为上面已经做过,所以可以不做。
A机器上执行iptables -t nat -A PREROUTING -d 192.168.202.129 -p tcp –dport 1122 -j DNAT –to 192.168.100.100:22,规则的意思就是比如windows本机IP是192.168.202.1,它的目标IP是192.168.202.129,目标端口是1122,然后端口转发,把它转发到IP为192.168.100.100的22端口,这是进去的包。
执行之前先把之前的规则清除,以免影响,iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens37 -j MASQUERADE,用D参数删除。
A机器上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT –to 192.168.202.129,从192.168.100.100回来的包经过A机器再做一个SNAT操作,把目标地址改成192.168.202.129,这个目标地址是在我们A机器上往外发出去的源IP,回到window机器上时才能识别,知道是哪个机器的过来的。
给B机器加上网关。命令:route add default gw 192.168.100.1。上面已经做过,所以可以省略。弄完之后原本不可以远程连接的B机器,现在可以通过远程连接A机器的公网IP:192.168.202.129的1122端口来连接B机器。
原文:http://blog.51cto.com/13382947/2066768