网络设备
先回顾下一下网络硬件的的基础概念( Hub, bridge, switch, router, gateway)
- Hub设备,一个重复转发器,就是从一个port接受到数据后,就会原样的向其他的所有端口发送刚才收到的数据
- Bridge设备,一个工作在二层的数据转发设备,端口数量比较少,有端口学习,STP/RSTP协议,基于MAC地址实现数据转发
- Switch设备,端口比较多,数据传送速率也比bridge相对快,支持的管理能力也比较强,也是工作在2层的协议,同样也是基于MAC实现数据转发
- Router设备,支持3层网络协议,基于IP地址实现数据转发,链接不同的子网,实现大的网络互联, 可以说是目前互联网的核心组成部分
- Gateway设备,主要作用是连接两个不同的网络,这两个网络可能采用了不同的网络协议在通讯。又称网间连接器、协议转换器,现在的网络基本都是基于TCP/IP的协议进行通信的,所以,当前常见的路由器,也就充当了网关的角色
Linux系统与网络
Linux天生就是为网络而存在的,每台装有Linux 系统的计算机都可以实现,Router/Gateway 功能
Router/Gateway
Linux 内核默认关闭网络数据包的转发功能,遇到不匹配的数据网络数据包,直接丢弃,只要修改内核参数,打开ip_forward配置,放行netfilter防火墙的FORWARD链 (转发数据包时对应此规则链中的策略) , 如果这台机器配置公网地址的网络IP,就可与作为其他主机的网关
例如在创建好的一个子网中,默认10.0.2.1 是被分配为默认的网关,如果想要子网中其他主机的网关,参考操作如下:
host1: eth0 10.0.2.2 eth1 123.x.x.x
sysctl -w net.ipv4.ip_forward=1
iptable -A FORWARD -i eth0 -j ACCEPT
iptable -A FORWARD -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptable -A POSTROUTING -s 10.0.2.0/24 -o eth0 -j MASQUERADE
hostN:
ip route del defaut via 10.0.2.1 dev eth0
ip route add defaut via 10.0.2.2 dev eth0
完成以上配置,子网中的hostN主机就默认使用host1作为网关出口,登陆hostN主机验证,如果配置正确,可以返回 bing.com 域名的IP和 html 页面
- 特别提示: 变更网关操作会断网,有条件建议本地主机操作,远程操作需谨慎
ping bing.com
curl http://bing.com
GRE (ip over ip)
host1: 10.0.2.170 <-----> 互联通道 <-----> host2: 10.0.3.189
Peer地址 10.1.1.1/30 |----- gre协议 ------| Peer地址 10.1.1.2/30
在某些受限的网络环境,比如云平台VPC网络,默认路由无法更改,可以使用 gre 协议来打通,结合策略路由表(ip rule/ ip route table ),就可以实现网络流量的转发,打通GRE隧道参考:
host1 执行命令:
modprobe -r ip_gre
ip tunnel add gre01 mode gre remote 10.0.3.189 local 10.0.2.170
ip addr add 10.1.1.1/30 peer 10.1.1.2/30 dev gre01
ip link set gre01 up
host2 执行命令:
modprobe -r ip_gre
ip tunnel add gre01 mode gre remote 10.0.2.170 local 10.0.3.189
ip addr add 10.1.1.2/30 peer 10.1.1.2/30 dev gre01
ip link set gre01 up
策略路由
host1 执行命令:
ip route add 0.0.0.0/0 dev gre01 table 10
ip rule add from 172.16.0.0/24 table 10 prio 10
host2 执行命令:
ip route add 172.16.0.0/24 dev gre01 table 10
ip rule add to 172.16.0.0/24 table 10 prio 10
vpn(wireguard)
相比openvpn,ipsec等老牌vpn软件,wireguard是Linux 内核5.6版本后内置支持的vpn,这里以ubuntu为例子,来介绍wireguard的安装配置
add-apt-repository ppa:wireguard/wireguard
apt-get install wireguard
modprobe wireguard(激活它)
lsmod | grep wireguard (检查是否安装成功)
创建密钥对
wg genkey | tee server_private.key | wg pubkey > server_public.key
wg genkey | tee client_private.key | wg pubkey > client_public.key
Server端口的配置
mkdir -pv /etc/wireguard
cat > /etc/wireguard/wg0.conf << EOF
[Interface]
PrivateKey = 替换为server_private_key的内容
Address = 172.16.0.2/24
ListenPort = 54321
MTU = 1420
DNS = 8.8.8.8
[Peer]
PublicKey = 替换为client_public_key的内容
AllowedIPs = 172.16.0.3/32, 192.168.0.0/24
PersistentKeepalive = 25
EOF
wg-quick up wg0
Peer端口的配置
sudo mkdir /etc/wireguard
sudo cat > /etc/wireguard/wg0.conf << EOF
[Interface]
PrivateKey = 替换为client_private_key的内容
Address = 172.16.0.3/32
MTU = 1420
DNS = 8.8.8.8
[Peer]
PublicKey = 替换为server_public_key的内容
AllowedIPs = 172.16.0.3/32, 192.168.0.0/24
PersistentKeepalive = 25
Endpoint = 106.75.4.69:54321
EOF
- MacOS
- 安装wireguard: sudo brew install wireguard-tools
- 启动wireguard: sudo wg-quick up wg0
网友评论