Windows访问Linux的宿主机上Linux VM的Samba服务

初始目的是想直接在服务器的VM上编写代码,调试代码。由于工作机是Windows,就想直接在VM上开Samba服务,然后Windows直接编辑。总结了一下过程:
0、环境说明:工作机Windows10;Linux服务器Ubuntu18.04;VM:Ubuntu18.04
1、VM安装并开启Samba服务,网上一大堆,可以参考如下
Ubuntu 18.04安装Samba服务器及配置.
2、解决Windows访问VM的地址问题。Linux服务器的地址在172网段,而VM通常分配192.168网段。这需要一个NAT转换。首先在Linux宿主机的网卡上配置一些辅地址,然后映射到VM分配的IP地址,如下所示:

ip addr add 172.171.8.13/24 dev eno1   //设置辅地址
iptables -t nat -I OUTPUT -d 172.171.8.13 -j DNAT --to 192.168.122.236  //设置NAT规则
iptables -t nat -I PREROUTING -d 172.171.8.13 -j DNAT --to 192.168.122.236  //设置NAT规则
iptables -t nat -I POSTROUTING -d 192.168.122.0/24 -j SNAT --to 192.168.122.1  //设置NAT规则

具体的详细的iptables使用手册参见:
Linux下防火墙iptables用法规则详及其防火墙配置.
3、遇到的问题:我这样配置之后,windows ping 172.171.8.13 发现无法ping通,通过在宿主机上抓icmp的报文,发现目的端口不可达。使用iptables -nL看,一堆FORWARD规则:

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

怀疑与这些reject规则有关,先使用 iptables-save > /etc/iptables.up.rule 保存了规则,然后打开看看,发现与之相关的条目有:

-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable

再使用iptables -nvL 查看丢包,发现是这两个reject导致的丢包。由于虚机是virt-manager起的,怀疑是该管理程序自己加入的规则。使用命令删掉:

iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
iptables -D FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable

这样就通了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值