linux跨网段实现内网互通_docker跨主机通信

linux跨网段实现内网互通_docker跨主机通信1.简介TCP协议规定只有处于同一个网段的IP才能实现互通,如果处于不同网段,可以配置一台双网卡机器为网关然后指定路由线路实现跨网段访问。实现思路:将双网卡服务器作为一个代理服务器,实现双向网关的一个功能如上图所示,Proxy作为双向网关Client如果要实现Server的互通,如果Client和Server在同一个子网段可以直接ping同,但是如果不在同一个网段,Client就会先去找其网关,再由其网关寻找Server,对于Server也是这样。2.实现方案2.1代理1.开启数据包的转发功

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1.简介
在这里插入图片描述

TCP协议规定只有处于同一个网段的IP才能实现互通,如果处于不同网段,则需要借助于所属的网关,即我们可以配置一台双网卡机器作为网关,然后指定路由线路实现跨网段访问。

实现思路:将双网卡服务器作为一个代理服务器,实现双向网关的一个功能
如上图所示,Proxy作为双向网关
Client如果要实现Server的互通,如果Client和Server在同一个子网段可以直接ping同,但是如果不在同一个网段,Client就会先去找其网关,再由其网关寻找Server,对于Server也是这样。
2.实现方案
2.1 代理
1.开启数据包的转发功能

代理服务器打开终端执行如下命令

echo 1 >/proc/sys/net/ipv4/ip_forward

默认值0是禁止数据包转发,修改为1即开启数据包转发功能。如果提示无权限,可以使用vi或者gedit工具打开ip_forward文件直接修改。

2.2 设置路由表
用到的几个命令如下所示

新增静态路由sudo route add -net ip dev 网卡
删除静态路由sudo route del-net ip dev 网卡

具体配置方法:

  1. 代理服务器中新增发往Server端的路由表

    sudo route add -net 10.168.9.0 netmask 255.255.255.0 dev eth1 
    

    这条路由表的含义就是发往10.168.9.0/24网段的数据包都由eth1网卡发出

  2. 代理服务器中新增发往Client端的路由表

    sudo route add -net 192.168.1.0/24 netmask 255.255.255.0 dev eth0
    

    这条路由表的含义就是发往192.168.1.0/24网段的数据包都由eth0网卡发出

  3. Client服务器中设置网关为192.168.1.1

    sudo route add default gw 192.168.1.1
    

    设置之后就表示当Client端连接其他网段(非Client子网)时,就会找到192.168.1.1,进而使用192.168.1.1进行连接

    注意:

    网关只能设置为同一网段的其他IP;
    如果只是设置了网关但是没有在代理服务器中指定路由表(即步骤1,2),则Client端可以ping通代理上面的两张网卡,但是不能ping通10.168.1.xx的其他子网,即不能ping通Server端

  4. Server端设置网关为10.168.9.1

    sudo route add defaultgw 10.168.9.1
    

    以上步骤执行之后则可以互相ping通

3 永久配置方案
上面的步骤只能在终端中有效,平时测试没有问题,但是如果是工程实际应用中则需要进行永久配置

  1. 代理服务器需首先配置允许转发

    sudo vim /etc/sysctl.conf 
    net.ipv4.ip_forward=1
    

    在这里插入图片描述

  2. 代理服务器配置静态路由

    # vi /etc/rc.local
    

    然后将上一步的路由命令写入到该文件。

    sudo route add -net 10.168.9.0 netmask 255.255.255.0 dev eth1 
    sudo route add -net 192.168.1.0/24 netmask 255.255.255.0 dev eth0
    
  3. client、server端分别配置静态路由规则
    client:

    # vi /etc/rc.local
    

    然后将上一步的路由命令写入到该文件。

    sudo route add default gw 192.168.1.1
    

    server:

    # vi /etc/rc.local
    

    然后将上一步的路由命令写入到该文件。

    sudo route add default gw 10.168.9.1
    

    重启后即生效。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194944.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深挖洞广积粮不称霸_threadlocal源码

    深挖洞广积粮不称霸_threadlocal源码ThreadLocal是什么早在JDK1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它

    2025年10月8日
    3
  • java基础菜鸟教程容器类,复习指南[通俗易懂]

    java基础菜鸟教程容器类,复习指南[通俗易懂]面试官最爱问的Kakfa,基础+进阶+高级,疯狂轰炸!Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息

    2022年6月28日
    27
  • TDD和FDD之间的区别(详细)「建议收藏」

    TDD和FDD之间的区别(详细)「建议收藏」本文转载自:https://www.cnblogs.com/chinamcs/archive/2010/04/27/1722156.html作者:chinamcs转载请注明该声明。我们知道FDD和区别+详细+.html’target=’_self’>TDD分别是频分双工和时分双工的英文缩写。FDD系统是指系统的发送和接收数据使用不同的频率,在上行和下行频率之间有双工间隔…

    2022年6月14日
    35
  • 逻辑运算符Python_逻辑运算符的优先级

    逻辑运算符Python_逻辑运算符的优先级#练习1:定义一个整数变量age,编写代码判断年龄是否正确age=180#要求人的年龄在0~120之间#if0<=age<=120:#新语法ifage>=0andage<=120:print(“年龄正确”)else:print(“年龄不正确”)…

    2025年6月7日
    2
  • 最详细的解决:UnboundLocalError: local variable ‘a‘ referenced before assignment

    最详细的解决:UnboundLocalError: local variable ‘a‘ referenced before assignment代码及报错如下解决很多人都非常困惑,为什么在test3中可以直接输出a,但是在test3中,使用a+=1的时候,就直接报错呢?首先,我们需要明确一个概念,就是全局变量与局部变量。如下图,大家觉得打印的a会是1还是3?答案是1,因为定义在test3外部的a是全局变量,而定义在test3内部的a是局部变量。此时,外面这个a与里面这个a没有任何关系。只不过是名字一样而已。其次,我们需要明确在函数内部是可以直接访问到全局变量的,所以上图中test1是可以直接输出a,b的。但是如果是直接在test2中实

    2022年6月16日
    44
  • PostgreSQL 临时表[通俗易懂]

    PostgreSQL 临时表[通俗易懂]转载自: http://blog.163.com/digoal@126/blog/static/1638770402012101575032326/SQL标准中临时表是一次创建,以后使用的时候无须再次创建的.并且每个会话保持各自的数据.但是在PostgreSQL中,临时表的使用有所改变.1.临时表在会话结束后会自动删除(或者在事务结束后删除oncommitdrop)

    2025年7月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号