两个局域网网络打通

两个局域网网络互相是不通的,想要把两个局域网的网络打通,有很多种方法,今天结合我们公司的实际需求,简单说说我们用过的办法。

我们公司在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
2
3
4
21楼路由器(10.168.3.1):
静态路由:目标 192.168.0.0/23,下一跳 10.168.3.254
隔壁办公室路由器(192.168.0.1):
静态路由:目标 10.168.3.0/24,下一跳 192.168.0.254

这样的话整体链路如下:

1
2
3
A 下面设备默认网关 10.168.3.1 → 走 A 自己的光纤
B 下面设备默认网关 192.168.0.1 → 走 B 自己的光纤
A 访 B 的流量:A 路由器匹配静态路由 → 丢给 10.168.3.254(中间盒)→ 中间盒直连转 B 网段 → B 路由器 → B 下设备
实操

1.关闭Centos的防火墙及selinux:

1
2
3
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.配两块网卡 IP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# eth0 接 A
/etc/sysconfig/network-scripts/ifcfg-eno1文件把对应项改为以下:
TYPE=Ethernet
DEFROUTE=yes #开启默认路由,如果路由器不需要上外网,只充当中间小路由,不加默认路由也可以
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.168.3.254
NETMASK=255.255.255.0
GATEWAY=10.168.3.1
DNS1=10.168.2.235
DNS2=202.96.128.86

EOF

# eth1 接 B(注意 B 是 /23)
/etc/sysconfig/network-scripts/ifcfg-eno2文件把对应项改为以下:
TYPE=Ethernet
DEFROUTE=no
BOOTPROTO=static
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.0.254
NETMASK=255.255.254.0

#重启网络生效
systemctl restart network

查看路由:

1
2
3
4
[root@localhost yum.repos.d]# ip route
default via 10.168.3.1 dev eno1 proto static metric 100
10.168.3.0/24 dev eno1 proto kernel scope link src 10.168.3.254 metric 100
192.168.0.0/23 dev eno2 proto kernel scope link src 192.168.0.254 metric 101

3.开 IP 转发

1
2
3
4
5
6
7
# 临时
echo 1 > /proc/sys/net/ipv4/ip_forward

# 持久化
sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/' /etc/sysctl.conf
grep ip_forward /etc/sysctl.conf # 确认是 1,没有就手动加一行 net.ipv4.ip_forward = 1
sysctl -p

4.A、B 主路由加静态路由

1
2
Router A(10.168.3.1):192.168.0.0/2310.168.3.254
Router B(192.168.0.1):10.168.3.0/24192.168.0.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/24192.168.0.254

5.验证

1
2
3
4
5
6
7
8
9
10
11
12
13
# Centos服务器
ping 10.168.3.1 # A 路由
ping 192.168.0.1 # B 路由

# A办公室设备pingB办公室设备
ping 192.168.0.100

# B办公室设备pingA办公室设备
ping 10.168.3.100

# Centos服务器,看转发有没有跑
tcpdump -i eno1 -n icmp # A 侧机器 ping B 侧时,这里应该能看到
tcpdump -i eno2 -n icmp # 从 eno2 出去

到这里应该两个办公室的网络就可以互通了,如果还不行的话,可以再尝试下以下的配置:

防火墙配置规则:

1
2
3
4
5
6
iptables -P FORWARD ACCEPT

# 如果默认 FORWARD 是 DROP 才需要下面这两条,ACCEPT 的话其实上面一句就够了
iptables -A FORWARD -s 10.168.3.0/24 -d 192.168.0.0/23 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/23 -d 10.168.3.0/24 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

保存:

1
service iptables save   # 写到 /etc/sysconfig/iptables

还不行的话看下是不是反向路径过滤的问题,CentOS 默认 rp_filter=1(严格模式),有些场景下从 eth1 进来的包源是 10.168.3.x,会被丢掉。表现:tcpdump eth1 能看到包进来,eth0 却看不到出去。

临时测试:

1
2
3
4
echo 0 > /proc/sys/net/ipv4/conf/eno1/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eno2/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter

如果改完正常的话,需要把这个配置永久写进/etc/sysctl.conf,不然重启就失效了:

1
2
3
4
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eno1.rp_filter = 0
net.ipv4.conf.eno2.rp_filter = 0

重载配置生效:

1
sysctl -p

最后,如果Centos服务器没有两个网卡,也能充当中间路由,两边路由器的网线都插到一个小交换机上,然后这个小交换机再接一条网线出来插到Centos服务器上,Centos服务器一块网卡起两个 alias:eth0:1= 10.168.3.254,eth0:2= 192.168.0.254,按理也是可行的。

Thank you for your accept. mua!
-------------本文结束感谢您的阅读-------------