内网服务器结合vxlan和iptables-snat实现内网服务器上网——筑梦之路

news2024/9/23 11:27:43

之前通过其他方式实现

CentOS搭建NAT和DHCP服务,实现共享上网_筑梦之路的博客-CSDN博客_vsphere 创建dhcp

CentOS 7 firewalld实现共享上网和搭建本地yum仓库——筑梦之路_筑梦之路的博客-CSDN博客

如上图,有这样一种场景,我们经常遇到,局域网内有两台服务器,Server 1和Server 2,Server 1可以通公网,Server 2只能通内网,无法直接访问公网

图中有错,server2的内网地址应该为192.168.30.12

现在想Server 2能访问到公网,怎么做?

通常的做法,是在Server 1服务器上开一个代理服务,比如Squid、Nginx等,然后在Server 2服务器上在profile中配置proxy代理

这种方法的弊端是,太局限,大多是情况只能7层代理,而且还会涉及到https代理证书问题等

那有没有更好的方法?

今天介绍一种简单又好用的方法,结合vxlan和iptables-snat实现内网服务器公网访问

Server 2与Server 1之间配置vxlan隧道

Server1配置

# Server 1作为NAT服务器,需要做一些NAT的网关改造
# rp_filter设置为0
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
    echo 0 > $f
done
  
# ip forward转发开启0
/sbin/sysctl -w net.ipv4.conf.all.forwarding=1
  
# 设置TCP超时参数
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=900
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=30
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=60
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_syn_sent=60
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_syn_recv=30
  
# 连接跟踪nf_conntrack_tcp_loose设置0,不跟踪已经完成握手的流,主要是连接跟踪性能优化项
# nf_conntrack_tcp_loose选项如果设置为0,对于未完成三次握手的流,内核连接跟踪模块将不会为其创建conntrack结构。反之,值为1的话,将为任意收到的tcp报文创建conntrack
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_loose=0
# 创建点对点vxlan隧道
# 方法:ip link add vxlan0 type vxlan id 1 remote {Server2} local {Server1} dstport ${vxlan封包的目的端口},linux目的端口号(VXLAN Port)默认为8472,指定为0,使用默认端口
ip link add vxlan0 type vxlan id 1 local 192.168.30.11 dstport 0
# 调整MTU
ifconfig vxlan0 mtu 1400
# 配置一个vxlan地址,最好单独使用一个网段
ip addr add 192.168.1.1/24 dev vxlan0
# 启动vxlan
ip link set vxlan0 up
# 可以查看vxlan0配置信息
ip addr show

 以上配置完成后,最重要的一步,设置iptables snat转换策略

iptables -t nat -I POSTROUTING ! -s 192.168.30.0/24 -j SNAT --to 192.168.30.11

这样Server1服务器就被改造成一个NAT网关,当然Server 1本身的上网等是没有任何问题的

Server2配置

# 删除默认路由,因为要配置Server 2路由走vxlan,走Server1作为网关,所以要删除原先的默认路由
route del default
# 和Server 1一样添加vxlan
ip link add vxlan0 type vxlan id 1 remote 192.168.30.11 local 192.168.30.12 dsport 8472
# 启动vxlan0
ifconfig vxlan0 up
# 修改MTU和Server 1一致
ifconfig vxlan0 mtu 1400
# 添加路由
route add 192.168.1.1 dev vxlan0
route add default gw 192.168.1.1
# 启用时间戳
sysctl -w net.ipv4.tcp_timestamps=0
# rp_filter设置为0
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
    echo 0 > $f
done

以上配置完成后,Server 2与Server 1之间通过vxlan实现通讯,Server 2默认路由走vxlan dev,然后指向Server 1,Server 1配置了iptable snat转发,所以Server 2到公网的所有请求都被Server 1转发出去,至此,Server 2实现公网访问

中间有个MTU的修改,这里说下原因

在TCP封装vxlan报文的时候,会增加50字节,如下图

所以这里避免转发过程中要分片,所以设置vxlan0的MTU为1400,这里可以通过抓包具体实测确定MTU大小

通过以上方法配置的内网转发,比通过Nginx、Squid等方式配置的7层代理要方便很多,可以解决很多7层以下公网访问的问题

作为资料搜集,原文:

如何让一台内网服务器连接公网?

参考资料:

VXLAN 基础教程:在 Linux 上配置 VXLAN 网络 - 简书

linux 上实现 vxlan 网络 | Cizixs Write Here

iptables配置SNAT实现共享上网_iptables snat_半隐退状态的博客-CSDN博客

手工实现docker的vxlan

使用OpenvSwitch构建Docker跨主机的vxLAN环境 | 码农家园

【爬坑系列】之vxlan网络实现 | VXLAN

iptables实现SNAT及DNAT - An.amazing.rookie - 博客园

iptables之SNAT与DNAT - 啦啦啦12178 - 博客园

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【以音视频开发进阶指南为基础】音视频基础概念

一、数字音频 数字音频可以粗糙的理解为将本质是模拟信号的声音音频数字化,那么如何数字化呢,需要经过三个步骤:采样、量化和编码。 采样:将声音的振动信息转化为电信号,再对电信号进行放大处理得到声音的模拟信号&a…

POE交换机常见问题解答

POE交换机通过网线供电的方式为标准的POE终端设备供电,可以免去额外的电源布线,在为一些基于IP的终端(如IP电话机、无线局域网接入点AP、网络摄像机等)传输数据信号的同时,还能为此类设备提供直流供电的技术。POE技术能…

Windows10安装java环境

Windows10安装java环境 文章目录Windows10安装java环境下载解压配置下载 Java8 https://www.oracle.com/java/technologies/downloads/#java8-windows Java11 https://www.oracle.com/java/technologies/downloads/#java11-windows Java17 https://www.oracle.com/java/techno…

12.日期与时间

目录 一.Date类 1.1 什么是Date类 1.2 Date类的构造器和常用方法 1.2.1 常用构造器 1.2.2 常用方法 二.SimpleDateFormat 2.1 什么是SimpleDateFormat 2.2 SimpleDateFormat的作用 2.3 SimpleDateFormat的构造器和方法 2.3.1 构造器 2.3.2 方法 2.3.3 例子 2.4 Sim…

[论文笔记] XRP: In-Kernel Storage Functions with eBPF

XRP: In-Kernel Storage Functions with eBPF XRP: 利用 eBPF 的核内存储函数 [Paper] [Slides] [Code] OSDI’22 摘要 提出了 XRP, 一个允许应用程序从 NVMe 驱动程序中的 eBPF 钩子(hook)执行用户定义的存储函数(例如索引查找或聚合)的框架, 可以安全地绕过大部分内核的存…

中国电子学会2022年09月份青少年软件编程Python等级考试试卷一级真题(含答案)

分数:100 题数:37 测试时长:60min 一、单选题(共25题,共50分) 1.表达式len("学史明理增信 ,读史终生受益") > len(" reading history will benefit you ")的结果是?(…

vue3全局组件自动注册

前言:本文主要讲述vue3的全局公共组件的自动注册第一步:建文件需要在src/components 下创建一个文件夹用于存放封装的公共组件(这里我起名叫coms)需要在src/components 下创建一个js文件用于存放引入组件并注册(这里我…

前端经典面试500题【下】

面试 一、vue 说说vue动态权限绑定渲染列表&#xff08;权限列表渲染&#xff09; 首先请求服务器,获取当前用户的权限数据,比如请求 this.$http.get(“rights/list”); 获取到权限数据之后,在列表中使用v-if v-if-else的组合来展示不同的内容 <template><div>&…

JavaScript基础复盘3

流程控制 在一个程序执行的过程中&#xff0c;各条代码的执行顺序怼程序的结果是有直接影响的。很多时候我们药通过控制代码的执行顺序来实现我们药完成的功能。 简单理解&#xff1a;流程控制就是来控制我们的代码按照什么结构顺序来执行 JavaScript作为一门程序语言&#x…

JDBC-Mysql数据库连接池

传统数据库连接的弊端 一个java程序多个正常要开启多个mysql连接-正常开发中次数在1w次往上&#xff08;还可能有多个java程序-并发编程&#xff09;&#xff0c;但是如果很多歌连接的话&#xff0c;数据库可能就瘫痪了 测试一个程序连接5000次 抛出一个&#xff0c;太多连接的…

离校毕业生刚去新的陌生城市,需要提高警惕的几点

很多大学毕业生其实阅历还不是特别的多&#xff0c;从小在自己熟悉的环境长大&#xff0c;即便是读了大学&#xff0c;可能也是在自己熟悉的学校附近活动&#xff0c;同学们集体出去逛个街&#xff0c;放假了就回家了。 但一旦大学毕业要离校&#xff0c;可能你会去一个陌生的新…

论文笔记:Learning Disentangled Representations of Video with Missing Data

2020 Neurips 1 intro & abstract 视频表征的一个挑战是高维、动态、各个像素之间多模态分布 最近的一些研究通过探索视频的inductive bias&#xff0c;并将高维数据映射到低微数据中—>这种方法通过将视频的各帧分解成语义上有意义的因子&#xff0c;来获得视频的解耦…

Maven初级(二)

目录 四.第一个Maven项目&#xff08;手工制作&#xff09; 4.1 Maven工程目录结构 4.2 手工制作Maven项目的步骤 4.2.1 手工制作项目的目录结构或使用插件创建项目的目录结构 4.2.2 在项目的src同层目录下创建pom.xml文件 4.2.3 在cmd中使用Maven项目构建命令 四.第一个…

自动驾驶感知——物体检测与跟踪算法|4D毫米波雷达

文章目录1. 物体检测与跟踪算法1.1 DBSCAN1.2 卡尔曼滤波2. 毫米波雷达公开数据库的未来发展方向3. 4D毫米波雷达特点及发展趋势3.1 4D毫米波雷达特点3.1.1 FMCW雷达角度分辨率3.1.2 MIMO ( Multiple Input Multiple Output)技术3.2 4D毫米波雷达发展趋势3.2.1 芯片级联3.2.2 专…

[docker]-docker安装prometheus和grafana

导语&#xff1a;需要排查部分出问题的私有化环境。直接上一个docker的node_exporter prometheus grafana 最方便。 所用到的安装包在最下面的云盘。 解压安装自定义node_exporter # 这个abc的包名可以忽略 tar zxvf abc.tgz cd abc cp node_exporter /usr/local/ cat <…

Mybatis 动态sql的编写|开启二级缓存

❤️作者主页&#xff1a;微凉秋意 ✅作者简介&#xff1a;后端领域优质创作者&#x1f3c6;&#xff0c;CSDN内容合伙人&#x1f3c6;&#xff0c;阿里云专家博主&#x1f3c6; ✨精品专栏&#xff1a;数据结构与课程设计 &#x1f525;系列专栏&#xff1a;javaweb 文章目录前…

Linux-主要目录

/: 根目录&#xff0c;一般根目录下只存放目录&#xff0c;在Linux下有且只有一个根目录&#xff0c;所有的东西都是从这里开始当在终端里输入 /home,其实是在告诉电脑&#xff0c;先从/&#xff08;根目录&#xff09;开始&#xff0c;再进入到home目录/bin、/usr/bin:可执行二…

java基于ssm的旅游景点门票预订网站

通过本系统&#xff0c;能够实现用户进行登录后&#xff0c;在网站上对旅游景点信息进行门票预订&#xff0c;也可以通过在线留言系统&#xff0c;了解景点相关信息&#xff0c;为用户提供全方位的服务&#xff0c;同时为节省用户的时间&#xff0c;本系统采用分地名的方式&…

2022尚硅谷SSM框架跟学(七)Spring MVC基础二

2022尚硅谷SSM框架跟学 七 Spring MVC基础二4.SpringMVC获取请求参数4.1.通过ServletAPI获取4.2.通过控制器方法的形参获取请求参数4.3.RequestParam4.4.RequestHeader4.5.CookieValue4.6.通过POJO获取请求参数4.7.解决获取请求参数的乱码问题5.域对象共享数据5.1.使用ServletA…

LCX端⼝转发

LCX是一款十分经典的内网端口转发工具&#xff0c;基于Socket套接字&#xff0c;具有端口转发和端口映射的功能。但是目前很多杀软已经将其加入了特征库&#xff0c;在实际利用的时候需要自行做免杀处理。lcx有三个功能&#xff1a;第一个功能将本地端口转发到本地另一个端口上…