解决Docker容器iptables不能用

最近使用frp做跳板远程运维内网的服务器,尽管已经屏蔽了海外IP对vps服务器的访问,但是总觉得直接暴露远程管理的端口在互联网上还是不安全。于是想着用Ocserv做服务端先vpn拨进去在进行运维会安全很多。选择Ocserv的原因也是因为支持思科的 anyconnect客户端,各大应用市场都不屏蔽比较具有易用性。

然而在Centos8上安装Docker之后,Docker中再使用Ocserv容器的时候iptables不能正常工作。目前貌似资料不好找,特此做个笔记保留下。

故障描述

附上Docker-Ocserv作者Git: https://github.com/Pezhvak/docker-ocserv我很喜欢这个封装好的Docker image,当然为了适配也做了一些更改,其中也包括了下文。

该Docker镜像使用非常小巧的 Alpine Linux,由于VPN拨号之后需要做NAT才可以访问其他网络中地址,结果抓包看到不正常。进入容器中提示如下。

iptables -L -n
modprobe: can't change directory to '/lib/modules': No such file or directory
iptables v1.8.7 (legacy): can't initialize iptables table `filter': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

作为关键词,你从搜索引擎得到的大多数答案都有两种方法来解决这个问题:

[En]

As keywords, most of the answers you get from search engines have two ways to solve the problem:

文中有人提到:发现宿主机是 Centos8,并且容器为 alpine:3.10的时候出现了相同问题。原因是 Centos8没有加载iptables需要的内核模块。该作者通过先执行: sudo modprobe iptable_filter, sudo modprobe iptable_nat之后再开启 alpine容器修复了这个问题。

我在想:我的宿主机 Centos8运行的Iptables工作良好呀,怎么可能没有加载iptables所需要的内核模块呢?

再接下来的回帖中找到了答案:原来再存在两个版本的iptables,他们分别是 iptables-nftiptables-legacy这两个 iptables使用了不同的内核模块。 alpine默认使用的是 iptables-legacyCentos8默认使用的是 iptables-nft。因为宿主机没有加载对应的内核模块所以容器就无法使用内核模块就说得过去了。

解决问题:

那么现在解决问题的方法有两个了,一个是参照文中提到的手动加载容器中 iptables-legacy所需的模块(该方法我并 未验证使用,担心对宿主机中已经配置好的iptables产生影响)。

第二个方法也是我 在用的方法,将容器启动脚本中所有的 iptables命令,更改为 iptables-nft问题完美解决。

iptables-nft -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

例如:
iptables-nft -t nat -A POSTROUTING -j MASQUERADE
iptables-nft -A INPUT -p tcp --dport 443 -j ACCEPT
iptables-nft -A INPUT -p udp --dport 443 -j ACCEPT

相关链接:

Original: https://www.cnblogs.com/redcat8850/p/16135814.html
Author: redcat8850
Title: 解决Docker容器iptables不能用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523850/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis内存满了怎么办

    Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。 1、通过配置文件配置 通过在Red…

    Linux 2023年5月28日
    069
  • 关于飞书事件订阅功能的应用

    此项目源码我也是站在巨人的肩膀上进行一个二次应用,感谢这位大神的共享 附上源码链接–Feishu-Event-Subscribe: 【实验】飞书的事件订阅 主要是通讯录…

    Linux 2023年6月14日
    085
  • Windows 域控配置时间同步

    此功能是因内网时间与互联网时间不同步,需我们手动指定互联网NTP服务器来同步时间。一般默认情况下,加域客户端同步的是域主机的时间。如果域控的主机时间不准的话,那么域内的客户端也就随…

    Linux 2023年6月8日
    0141
  • sed用法

    基础sed命令 sed OPTIONS… [SCRIPT] [INPUTFILE…] 常用的选项: -n,–quiet: 不输出模式空间中的内容 -i: 直…

    Linux 2023年6月6日
    0125
  • 读《软件测试的艺术》——第一章

    《软件测试的艺术》作为元老级别的测试理论书籍,在业内非常经典且有口皆碑,书中提出的 软件测试为求错而非求证的观点至今仍在学术界被广泛讨论。本书还为计算机界一个最为重要的主题提供了一…

    Linux 2023年6月13日
    099
  • Java List和Map遍历的方法,forEach()的使用

    注意: 不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。 Java 8之前 …

    Linux 2023年6月7日
    0101
  • Windows Server OS 系列安装

    Windows Server OS 系列安装 Windows Server 2003 Windows Server 2008 Windows Server 2012 Windows…

    Linux 2023年6月13日
    090
  • Linux目录结构信息

    一、系统目录结构介绍 1.1 常见系统目录结构 Windows下: C:\windows D:\Program Files Linux下: /etc/sysconfig /usr/…

    Linux 2023年5月27日
    074
  • 不自由的自由职业

    大家好,我是良许,前码农,现在自由职业者。 有关注我朋友圈的小伙伴都知道,就在上周,我刚刚结束了长达 35 天的「假期」。 此言一出,立刻掀起了评论区留言狂潮,大家纷纷问我,你特么…

    Linux 2023年6月14日
    081
  • 一面数据: Hadoop 迁移云上架构设计与实践

    背景 一面数据创立于 2014 年,是一家领先的数据智能解决方案提供商,通过解读来自电商平台和社交媒体渠道的海量数据,提供实时、全面的数据洞察。长期服务全球快消巨头(宝洁、联合利华…

    Linux 2023年6月14日
    0122
  • Linux文件属性及权限

    Linux文件属性及权限 首先我们以root用户的身份登录linux,执行ls -al 查看文件: 文件类型: 【d】 代表目录(directory)、【-】代表文件、【l】代表链…

    Linux 2023年6月11日
    091
  • 博客被阮一峰引流后,我对“大数据”的分析与思考

    事情经过 2021年9月3日,一个普通的的早上,我照常打开了我的小博客网站echeverra,看看有没有评论,虽然知道大概率没几个人访问,更鲜有人评论,可还是想打开自己的小窝瞅上那…

    Linux 2023年6月7日
    078
  • NoteOfMySQL-14-日志管理

    一、MySQL日志 日志是MySQL数据库的重要组成部分,日志文件记录了MySQL数据库的日常操作和错误信息,可以通过分析这些日志文件了解MySQL数据库的运行情况。MySQL数据…

    Linux 2023年6月14日
    088
  • MySQL slow log 慢日志

    sql慢日志用于记录执行时间超过指定阈值的SQL,对于系统性能和故障排错非常有帮助 1.如何开启sql慢日志 –开启slow log …

    Linux 2023年6月6日
    075
  • python写一个双色球彩票计算器

    首先声明,赌博一定不是什么好事,也完全没有意义,不要指望用彩票发财。之所以写这个,其实是用来练手的,可以参考这个来预测一些其他的东西,意在抛砖引玉。 啰嗦完了,马上开始,先上伪代码…

    Linux 2023年6月6日
    0103
  • PHP利用Apache、Nginx的特性实现免杀Webshell

    环境函数用法 nginx get_defined_vars() 返回由所有已定义变量所组成的数组 apache getallheaders() 获取全部 HTTP 请求头信息 ap…

    Linux 2023年5月28日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球