php zhxing iptables,KVM使用NAT联网并为VM配置iptables端口转发

KVM使用NAT联网并为VM配置iptables端口转发

[https://www.ilanni.com/?p=7016]

1-1. KVM为VM配置NAT网络

我们可以通过如下命令,查看NAT是否开启。如下:

virsh net-list

0f951660c9295247f6a529203c50f9dd.png

通过上图,我们可以看到NAT方式已经开启。而且default是宿主机安装VM支持模块的时候自动安装的。

1-2. 我们也可以查看,系统中已经存在的网卡。

ifconfig

5eb83d3e48e8f01a378c42d29e892933.png

通过上图,我们可以看出网卡virbr0就是NAT方式连接网络时,所使用到的网卡

1-3. 通过配置文件,来查看NAT方式的DHCP地址池,该配置文件为:/etc/libvirt/qemu/networks/default.xml

cd /etc/libvirt/qemu/networks/

pwd

more default.xml

7f2b826c8f11902db8f7068cef3496a7.png

通过上图我们可以看出,目前NAT使用的IP地址池是192.168.122.2-192.168.122.254,网关为192.168.122.1,子网掩码为255.255.255.0

1-4. 创建虚拟机时如下命令

qemu-img create -f qcow2 /home/images/kvm31.img 20G

virt-install --name kvm31 --ram 2048 --vcpus=2 --os-type=windows --accelerate --cdrom=/home/ios/zh-Hans_windows_web_server_2008_x64_dvd_x14-26154.iso --disk path=/home/images/kvm31.img,format=qcow2,bus=ide --network network=default --video=vga --vnc --vncport=5931 --vnclisten=0.0.0.0 --force --autostart

其中

--network network=default   //就是指默认网络配置default.也就是这里的NAT

同时有关硬盘的格式与接口模式也一定要注意

--disk path=/home/images/kvm31.img,format=qcow2,bus=ide

1-5. 默认情况下VM此时使用的DHCP方式获取IP地址,可以ping www.baidu.com 可以通.

这边以kvm11 [192.168.122.159] 为例

ssh root@192.168.122.159

cd /etc/sysconfig/network-scripts

ls

cat ifcfg-eth0

dc6871398f86f3f9c5c6c0922f6380f8.png

f924ec79b2764eaf8bc4ec25551cdc6c.png

如果你在安装系统时未进行网络配置。我们现在修改VM使用静态IP地址

ssh root@192.168.122.159

vi /etc/sysconfig/network-scripts/ifcfg-eth0

BOOTPROTO=static             //以前是dhcp

ONBOOT=yes                   //以前是no

IPADDR=192.168.122.159

GATEWAY=192.168.122.1

NETMASK=255.255.255.0

7fd1c374c06b865e6185126e1e2b0853.png

systemctl restart network.service

2598e1ec34bbdec0bc35fffc5e9e5a7a.png

就发现已经ping www.baidu.com 不通了.

1-6. 现在切换到KVM服务器[是笔记本,不是kvm11],开启KVM服务器的IP转发功能

vi /etc/sysctl.conf

增加以下代码

net.ipv4.ip_forward=1      // [也可换成 echo net.ipv4.ip_forward=1>>/etc/sysctl.conf ]原本是 net.ipv4.ip_forward=0 ,可是我这台没有这条.不知道为什么

15e7e8898ff078f27bc436f31a1c9c1c.png

sysctl -p

43b91c5f6d7060f134bf566672e22732.png

1-7. 我们还要开启KVM服务器的IPtables的转发功能,使用如下命令:

iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE

注意该命令中的网卡时br0,而不是eth0

1-8. 此时,我们再切换VM[kvm11]中测试的网络通信情况。如下:

发现ping www.baidu.com 不通,但 ping 182.61.200.7 能通

88a32c7b51970783ddc5b0898c7fd12d.png

1-9. 解决 name or service not known

虚拟机[kvm11]

vi /etc/resolv.conf

nameserver 8.8.8.8

nameserver 8.8.4.4

systemctl restart network.service

351021239bb0c2b19e68981e46a0d5b9.png

eb14c1a179b43f55578253dfc08f00ff.png

2. 为VM配置iptables端口转发

假设该KVM的公网IP为192.168.50.146,VM的IP为192.168.122.159,现在我要求通过访问KVM的8022端口访问VM的22端口

要想达到上述功能,我们需要在KVM服务器上[笔记本上]设置如下IPtables规则:[https://www.cnblogs.com/whych/p/9147900.html]

iptables -t nat -A PREROUTING -d 192.168.50.146 -p tcp -m tcp --dport 8022 -j DNAT --to-destination 192.168.122.159:22

iptables -t nat -A POSTROUTING -s 192.168.122.255/255.255.255.0 -d 192.168.122.159 -p tcp -m tcp --dport 22 -j SNAT --to-source 192.168.50.146

注意这两条IPtables规则:

第一条规则很好理解,就是把所有访问192.168.50.146:8022的请求转发到192.168.122.159:22的端口上。

第二条规则我的理解是,把所有来自192.168.122.0/255.255.255.0网段访问192.168.122.159:22的数据全部通过192.168.122.1这个网关转发出去。

现在我们来实际效果,如下:

ssh -p 8022 root@192.168.50.146

发现一打开就被关闭.是被防火墙阻止了.

2-2. 打开防火墙

systemctl start firewalld.service

firewall-cmd --zone=public --add-port=5901-6100/tcp --permanent  //添加一个端口5901-6100

firewall-cmd --zone=public --add-port=8022/tcp --permanent       //添加一个端口8022

firewall-cmd --zone=public --add-port=873/tcp --permanent        //添加一个端口873

firewall-cmd --zone=public --add-port=80/tcp --permanent         //添加一个端口80

firewall-cmd --zone=public --add-port=443/tcp --permanent        //添加一个端口443

firewall-cmd --reload                                            //重新加载规则

firewall-cmd --list-port                                         //列出添加的端口

代码分析

--zone #作用域

--add-port=1935/tcp    //添加端口,格式为:端口/通讯协议

--permanent            //永久生效,没有此参数重启后失效

fbcab431df9fbabef0509800e5577526.png

最后一步不知道怎么处理,就是没成功.

3423362427d8af7afdd5f7d41882d86f.png

清空规则

sudo iptables -P INPUT ACCEPT

sudo iptables -P OUTPUT ACCEPT

sudo iptables -F

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT                                     //ssh

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT                                                              //http

sudo iptables -I INPUT 1 -i lo -j ACCEPT                                                                        //保持彼此之间的通信--[成功]

sudo iptables -P INPUT DROP                                                                                      //INPUT链的默认规则更改

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值