工作中有时需要用到其他城市的IP地址,此时我们可以选择用代理的方式实现访问出口为其他城市出口IP。

部署前准备: 保证两台服务器之间能相互ping通

A服务器(上海):内网IP:172.16.1.12

B服务器(广州):内网IP:10.13.101.83

一、配置IP隧道

1、上海服务器上配置(其中a2b只是一个接口名称,当然也可以换成其他的)

# 其中 192.168.2.1 只是一个虚拟IP,与实验的两个网段IP不一致即可
# ip tunnel add a2b mode ipip remote 10.13.101.83 local 172.16.1.12
# ifconfig a2b 192.168.2.1 netmask 255.255.255.0
# iptunnel show
tunl0: unknown/ip  remote any  local any  ttl inherit  nopmtudisc
a2b: ip/ip  remote 10.13.101.83  local 172.16.1.12  ttl inherit

2、广州服务器上配置

# ip tunnel add a2b mode ipip remote 172.16.1.12 local 10.13.101.83
# ifconfig a2b 192.168.2.2 netmask 255.255.255.0
# iptunnel show
tunl0: unknown/ip  remote any  local any  ttl inherit  nopmtudisc
a2b: ip/ip  remote 172.16.1.12  local 10.13.101.83  ttl inherit

3、隧道效果测试,在广州服务器上操作

# ip addr|grep 192.168.2.2inet 192.168.2.2/24 scope global a2b
# ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=8.35 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=7.91 ms

二、上海服务器配置路由规则

说明:上海服务器配置路由规则是为了上海服务器访问内地网络的话就走隧道发给广州服务器

1、内地网络IP段文件下载

国内IProute.txt-网络安全文档类资源-CSDN下载

2、下载文件后修改文件使其符合当前规则并在香港服务器上执行,添加路由

# -net 后面的IP端代表想通过内地服务器访问的IP端,当前我们是把所有内地网段都添加了
# route add -net 1.12.0.0/14 gw 192.168.2.2
# route add -net 1.24.0.0/13 gw 192.168.2.2
......

三、服务器配置NAT

1、广州服务器上配置NAT

# sysctl -w net.ipv4.ip_forward=1
# sed -i '/net.ipv4.ip_forward/ s/0/1/'  /etc/sysctl.conf# 把上面下载的内网IP段全部添加上
# iptables -t nat -A POSTROUTING -s 192.168.2.1 -d 1.0.1.0/24 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 192.168.2.1 -d 1.0.2.0/23 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 192.168.2.1 -d 1.0.8.0/21 -j MASQUERADE
......

2、上海服务器配置NAT规则

# sysctl -w net.ipv4.ip_forward=1
# sed -i '/net.ipv4.ip_forward/ s/0/1/'  /etc/sysctl.conf# 把上面下载的内网IP段全部添加上
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 1.0.1.0/24 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 1.0.2.0/23 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 1.0.8.0/21 -j MASQUERADE# 10.8.0.0/24 是到时候VPN客户端获取到的IP,这个网段比较固定,所以我先写上,后期发现不对的话,修改即可。

四、上海OpenVPN服务部署

说明:在上海部署VPN是为了上海用户可以通过VPN客户端连接上海服务器

1、安装部署

# wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh# 根据提示,一直点击回车。直到提示输入Name [client]: vpncy   (这个名称比较随意)

2、安装好后会在/root 目录下生成一个vpncy.ovpn文件,该文件为客户端导入配置文件

# ls /root/
vpncy.ovpn

3、客户端下载地址,下载后并安装

https://openvpn.net/community-downloads/

五、客户端使用测试

1、打开 openvpn 客户端,导入上面 root 目录下的 vpncy.ovpn 配置文件,然后连接

2、连接成功后,openvpn客户端会变成绿色,如图

3、访问百度查看IP地址,当前IP已经是广州云机器的IP了

六、问题排查

1、如果我们本地连接不上上海服务器,可能是我们当前网段添加进了上海主机的路由规则中,去掉我们当前公网IP网段规则就好了。
2、如果上海测试发现访问内地访问没有走广州机器出口,那么可能是访问的网站IP并不在路由规则中,添加路由规则以及广州云主机的NAT规则即可。
3、如果是其他的问题,可以通过抓包解决。
上海抓隧道包:

# tcpdump -i a2b

广州抓访问出口IP地址包:

# tcpdump -i eth0 host 150.109.64.105

总结:

本次实验相当于连接到上海机器VPN的用户出口网络以广州机器网络出口。实际情况还得看业务场景,是否能满足需求。

Linux服务器建立IP隧道,变更访问出口相关推荐

  1. 修改服务器ip 需要重启,linux服务器设置ip后需要重启吗

    linux服务器设置ip后需要重启吗 内容精选 换一换 切换操作系统是为您的弹性云服务器重新切换一个系统盘.切换完成后弹性云服务器的系统盘ID会发生改变,并删除原有系统盘.如果弹性云服务器当前使用的操 ...

  2. unity连接linux服务器,C#编程之C#通过SharpSSH库与Linux服务器建立SSH连接并执行命令...

    本文主要向大家介绍了C#编程之C#通过SharpSSH库与Linux服务器建立SSH连接并执行命令,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助. 在Unity3D项目开发工具时需要用到S ...

  3. Linux服务器上设置全局代理访问外网并验证

    Linux服务器上设置全局代理访问外网并验证 昨天碰到了内网需要访问外网下载的情况,需要在服务器上设置代理,没别的,就记录一下自己跳过的坑. 1.前提是已经搭建好了一台代理服务器 2.Linux设置全 ...

  4. linux 隧道服务器,两台linux服务器上建立ip隧道 | 菜鸟博客

    服务器server的地址192.168.18.251,服务器client的地址192.168.18.252. 建立隧道 在服务器server上执行以下命令: ip tunnel add ethn mo ...

  5. linux中服务器之间的跳转,linux之***服务器间ip隧道跳转多ip路由走向分流(系真实案例)...

    本文系统Centos6.0:这里的***服务以pptpd为例:其中底层涉及到pptpd+freeradius+mysql认证: 本文系真实案例:leader需求大多是这样的,节约成本还要达到所需要的效 ...

  6. 如何快速搭建服务器的IP隧道

    首先无论是在Linux服务器上还是windows上搭建隧道ip,都需要配置好 redis.python3.OpenResty. redis配置: 最前面的可以看这篇文章 Linux搭建redis单机 ...

  7. 使用tun虚拟网络接口建立IP隧道的实例

    通常的socket编程,面对的都是物理网卡,Linux下其实很容易创建虚拟网卡:本文简单介绍一下Linux虚拟网卡的概念,并以tun设备为例在客户端和服务器端分别建立一个实际的虚拟网卡,最终实现一个从 ...

  8. linux系统ip访问53端口,linux – 使用公共IP地址无法访问本地端口

    我有一个linux服务器,它有公共IP和私有IP.因此,当我使用公共IP登录时,终端直接显示私有IP. 例: $ssh root@55.27.XX.XX root's password: root@1 ...

  9. c# ssh到linux,C#通过SharpSSH库与Linux服务器建立SSH连接并执行命令

    在Unity3D项目开发工具时需要用到SSH连接远程Linux服务器执行命令,找到SharpSSH链接库后,通过此方法就可使用./// /// SSH登录远程Linux服务器,并运行指令 /// // ...

  10. windows Secure CRT使用SSH访问Linux服务器被拒绝,winscp访问Linux服务器被拒绝

    我们在windows上使用Secure CRT.PUTTY等工具SSH连接到Linux服务器时,会出现linux服务器拒绝访问情况. 可能是Linux系统上没有安装SSH服务: 在终端输入: ssh ...

最新文章

  1. cucumber 文件目录结构和执行顺序
  2. 哪种云存储服务最适合你?
  3. java list 查找_java面试之容器
  4. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板成员函数的实例化
  5. MySQL 4到5的快速升级
  6. php_mysql操作
  7. java mybatis狂神说sql_Mybatis框架下SQL注入审计分析
  8. Linux手动导入导出mysql数据库
  9. windows10 安装 rancher desktop及测试案例
  10. sql查询时取日期部分内容(年月日时分秒)、增加时间
  11. codeforce 595A
  12. 判断new数据初始化_拔剑-浆糊的传说_新浪博客
  13. 仿邓杰作品(艺家网站)总结
  14. 如何将word转换成excel表格格式
  15. QT简单实验——计算器
  16. 优化器介绍—SGD、Adam、Adagrad
  17. 关于面试的一些总结,仅供参考,希望大家指正投入学习
  18. 编码:UTF-8编码、UTF-16编码规则
  19. 大数据四大常识,你知道多少
  20. 【PowerDesigner】【2】将工具栏显示出来

热门文章

  1. LeetCode之K sum problem
  2. 关于LVDS的硬件总结
  3. 计算机系系徽设计说明,系徽设计大赛策划书
  4. ERROR: HHH000388: Unsuccessful: create table
  5. 李迟2022年4月工作生活总结
  6. 论文阅读《SHINE: Signed Heterogeneous Information Network Embedding for Sentiment Link Prediction》
  7. 定义Employee类(1)该类包含:private成员变量name,sal,birthday,其中birthday为MyDate类的对象;(2)为每一个属性定义getter,setter方法
  8. CODESYS在工厂自动化的应用案例:图尔克RFID射频识别技术的应用
  9. sparkling-water的介绍与实践(command line)
  10. amd支持服务器内存,AMD专用内存和普通内存的区别是什么?