两个局域网网络互相是不通的,想要把两个局域网的网络打通,有很多种方法,今天结合我们公司的实际需求,简单说说我们用过的办法。
我们公司在21楼,服务器都在21楼,老板还有另外一家公司在17楼,两家公司各自拉的光纤,两个局域网,网络是不通的,17楼的同事访问不了公司内网的服务,如果直接从21楼接一根网线到17楼,代价有点大,不太合适,所以这里通过vpn打通。
通过openvpn打通
在21楼部署openvpn服务,之前的文章已经说过怎么部署了,这里就不再赘述了(直通车),原本是给各个需要用到的同事开vpn账号,有需要的时候再连接,但是后面他们嫌弃太麻烦了,问有没有可以直接访问的,好吧,只能满足他们。
于是搞了台服务器放到17楼当openvpn客户端,这样这台服务器跟21楼的网络就是通的,然后再在这台服务器装个nginx服务配置反向代理,把需要访问的网站域名解析到这台服务器上。
用户访问网站,dns服务器把域名解析到nginx服务器,nginx服务器配置反向代理到21楼的服务器,整个链路就是:用户-nginx服务-openvpn-21楼的服务。
这样17楼的同事就可以无感直接访问21楼内网的服务了。
通过网线直连
近期,我们隔壁的公司走了,办公室空了出来,所以老板就要把17楼的办公室搬到我们隔壁,这样就可以直接用网线连通了,以下按不同的需求说明怎么操作。
21楼是多wan口路由器
直接把原本17楼的光纤也加到21楼,然后再从21楼的交换机接一条到隔壁的交换机,这样两个办公室就是一个局域网,都可以互通。
场景1:
如果隔壁需要保留原本的ip地址,那21楼接过来的网线就插到路由器的wan口,再从LAN口接跟网线到交换机,这样就可以保留原本的配置,但是这个相当于二级NAT,隔壁能访问21楼的,21楼的访问不了隔壁的,需要在21楼的路由器加一条静态路由到隔壁的局域网才可以访问。
场景2:
如果隔壁不管是WiFi还是有线都想跟21楼在同一个网段,那就把隔壁的路由器网段改成和21楼相同的网段的一个没使用的ip(比如21楼的网段是192.168.1.0/24,隔壁路由器的ip就设置为192.168.1.x),然后把21楼接过来的网线插到路由器的LAN口,然后把这个路由器的DHCP功能给关了,由21楼的路由器来分配ip地址,不然两个DHCP会冲突,这样隔壁的网络不管是有线还是无线都和21楼是一样的网段。
21楼是单wan口路由器
如果两个办公室都只用21楼(A办公室)的光纤,可能带宽不够,所以有没有办法,不花钱买额外的路由器,然后又能21楼的同事访问外网走21楼的光纤,隔壁办公室(B办公室)的同事访问外网走隔壁办公室的网络,同时两个办公室内网又能互通?
按之前的用vpn是一种办法,但是我都搬上来了,能不能用网线来连呢?
穷人被逼急了,什么办法都能想出来,我们可以在21楼办公室和隔壁办公室之间搞个中间小路由来做转发,大概是这样:

中间的小路由可以由OpenWrt 软路由充当,咸鱼上买应该一两百块可以买到,这里我刚好有台老旧的HP服务器,有两个网卡,于是废物利用起来,装了个Centos系统,开ip_forward来做转发。
Centos服务器需要配置以下几点:
1.网口1配置ip为10.168.3.254/24,网关可不设或指21楼路由器(10.168.3.1)
2.网口2配置ip为192.168.0.254/23,网关可不设或指隔壁办公室路由器(192.168.0.1)
3.开 ip_forward
4.配置静态路由:
1 | 21楼路由器(10.168.3.1): |
这样的话整体链路如下:
1 | A 下面设备默认网关 10.168.3.1 → 走 A 自己的光纤 |
实操
1.关闭Centos的防火墙及selinux:
1 | systemctl stop firewalld |
2.配两块网卡 IP
1 | # eth0 接 A |
查看路由:
1 | [root@localhost yum.repos.d]# ip route |
3.开 IP 转发
1 | # 临时 |
4.A、B 主路由加静态路由
1 | Router A(10.168.3.1):192.168.0.0/23 → 10.168.3.254 |
如果A办公室(10.168.3.0/24)下面还有二级路由器的话,比如网段是10.168.2.0/24,那B办公室的路由器还需要再加一条静态路由才可以访问10.168.2.0/24网段,不然找不到这个网段,会把包丢掉的:
1 | Router B(192.168.0.1):10.168.2.0/24 → 192.168.0.254 |
5.验证
1 | # Centos服务器 |
到这里应该两个办公室的网络就可以互通了,如果还不行的话,可以再尝试下以下的配置:
防火墙配置规则:
1 | iptables -P FORWARD ACCEPT |
保存:
1 | service iptables save |
还不行的话看下是不是反向路径过滤的问题,CentOS 默认 rp_filter=1(严格模式),有些场景下从 eth1 进来的包源是 10.168.3.x,会被丢掉。表现:tcpdump eth1 能看到包进来,eth0 却看不到出去。
临时测试:
1 | echo 0 > /proc/sys/net/ipv4/conf/eno1/rp_filter |
如果改完正常的话,需要把这个配置永久写进/etc/sysctl.conf,不然重启就失效了:
1 | net.ipv4.conf.all.rp_filter = 0 |
重载配置生效:
1 | sysctl -p |
最后,如果Centos服务器没有两个网卡,也能充当中间路由,两边路由器的网线都插到一个小交换机上,然后这个小交换机再接一条网线出来插到Centos服务器上,Centos服务器一块网卡起两个 alias:eth0:1= 10.168.3.254,eth0:2= 192.168.0.254,按理也是可行的。

