iptables - nat表的应用
网络相关:一台虚拟机可以增加不同的网卡,每个网卡可以工作在不同模式下;所有虚拟机的NAT网卡应该是在一个网段内;所有桥接也在一个网段内,而且跟宿主机是一个网段;所有仅主机模式在一个网段内,不能出外网,但是网段内可以互相通信;
所以以下虚拟机外网网卡的意思是NAT模式,设置好配置文件,这个网卡就可以共享到宿主机的网络,可以连通外网;(使用桥接也可以)
内网网卡的意思是仅主机模式或LAN区段,网卡肯定是不能出外网的;
需求 1:
电脑A有两个网卡,分别连接内网和外网; 电脑B有一个网卡,只可连接内网;
电脑B要利用电脑A访问外网;
- 虚拟机A原来有一个可连接外网的网卡,添加一个内网网卡(这个网卡要跟电脑B在一个网段内,可互相ping通;可参考以下步骤,不同的虚拟机操作可能不一样)
先增加一个网卡,默认是NAT
添加一个LAN区段
LAN区段功能就是设置一个网卡在你设置的网段内,这个网段不能跟宿主机通信,所以不能连接外网;但如果另外一个虚拟机也设置在这个LAN区段,那这两台机器可互相通信;网段是自定义的,用下面命令行方式,或使用配置文件方式都可以,配置文件只需要IP和netmask就可以;
事实上这个可以用仅主机模式代替,仅主机模式,让主机跟虚拟主通信,但是不会共享外网连接;如果多个虚拟机使用仅主机模式,那这些虚拟机之前可以互相通信,他们处于同一个网段;跟LAN区段的区别是,虚拟主可以跟宿主机通信;网络区段是给定的;
-
电脑B添加网卡,添加到上面设置的LAN 区段,让两个机器可以通信(原来有网卡在虚拟机里关闭或ifdown来把可以上网的网卡关闭)
-
一些命令
机器A:
ifconfig ens37 192.168.100.1/24 #命令设置IP地址,重启丢失;配置文件存在不能使用这个命令;
机器B:
ifconfig ens37 192.168.100.100/24 #IP为 192.168.100.100;
route -n #查看网关;
route add default gw 192.168.100.1 #设置网关为机器A的内网网卡IP;
#route - show / manipulate the IP routing table,修改影响力是很大的,设置这个后原来网卡配置文件的网关可能没用了,会导致一些问题,如ping不通外网,要比较注意,查找问题会比较麻烦。
-
此时两台电脑两个内网IP可互相ping通,电脑B不能ping通A的外网网卡;
-
设置A电脑ip_forward,开启转发
[root@tanyvlinux ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@tanyvlinux ~]# echo "1" > !$
echo "1" > /proc/sys/net/ipv4/ip_forward
- 设置电脑A iptable的转发控制 (发现不设置也可以,默认全部转发,命令有必要了解)
iptables -t nat -A POSTROUTING -s 192.168.100.100 -o ens33 -j MASQUERADE
- 电脑B这时可拼通电脑A的外网网卡
- 电脑B设置DNS后,可ping通外网,可上网
vi /etc/resolv.conf
需求2:
电脑A有两个网卡,分别连接内网和外网; 电脑B有一个网卡,只可连接内网;
电脑C可以访问电脑A外网IP;电脑C要利用电脑A SSH连接到电脑B;
- 电脑AB设置网卡不再重复;需要设置B网关为A的内网IP;B的其他网卡要ifdown;
- 设置A电脑ip_forward,开启转发,不再重复;
- 设置iptables规则
iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22 #设置访问A外网IP1122端口转发到电脑B的22端口;
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130 #设置电脑B的IP发出的包,改成为电脑A外网IP,跟A1122端口通信等于跟B通信;
- 即可通过电脑C SSH到电脑B
ssh root@192.168.133.130 -p 1122
iptables备份与恢复
- 命令1
service iptables save #会把规保存到/etc/sysconfig/iptables;
service iptables restart #重启后从配置文件里加载配置;
- 命令2
iptables-save > ipt.txt #把配置文件保存在自定义文件里;
iptables-restore < ipt.txt #从文件恢复规则;
iptables-save -t nat > ipt2.txt
iptables-restore < ipt2.txt