基本情况

假设目前有两台机器,

  • A公网ip:5.188.x.x ,网卡ens3
  • B公网ip:193.138.x.x ,网卡eth0

按照具体实例来说,A位于俄罗斯因封锁无法访问Telegram,希望将A中不能访问的ip段91.108.56.0/22路由到B,通过处在日本的B进行访问。
A中无法访问:

B中能访问:

设置方法

1.开启转发及GRE(在A、B上均执行)

1
2
3
4
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
modprobe ip_gre

2.在A上建立隧道

1
2
3
4
ip tunnel add tunnel mode gre local 5.188.x.x remote 193.38.x.x ttl 255 dev ens3
#随意指定隧道中A的地址为10.0.0.1,B的地址为10.0.0.2
ip addr add 10.0.0.1 dev tunnel peer 10.0.0.2
ip link set dev tunnel up

3.在B上建立隧道

1
2
3
4
ip tunnel add tunnel mode gre local 193.38.x.x remote 5.188.x.x ttl 255 dev eth0
#随意指定隧道中A的地址为10.0.0.1,B的地址为10.0.0.2
ip addr add 10.0.0.2 dev tunnel peer 10.0.0.1
ip link set dev tunnel up

4.最后工作

1
2
3
4
#在A上添加路由网段
ip route add 91.108.56.0/22 via 10.0.0.2 dev tunnel
#在B上配置
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.1/32 -j MASQUERADE

5.测试
A上路由:

A中ping原本不能ping通的ip:

A中mtr:

从A通过隧道地址Ping B:

在这之后即可在A中连接Telegram了。

附录

1
2
3
4
5
6
7
8
9
#Telegram的全部地址
ip route add 149.154.160.0/22 via 10.0.0.2 dev tunnel
ip route add 149.154.164.0/22 via 10.0.0.2 dev tunnel
ip route add 149.154.168.0/22 via 10.0.0.2 dev tunnel
ip route add 149.154.172.0/22 via 10.0.0.2 dev tunnel
ip route add 91.108.4.0/22 via 10.0.0.2 dev tunnel
ip route add 91.108.56.0/23 via 10.0.0.2 dev tunnel
ip route add 91.108.56.0/22 via 10.0.0.2 dev tunnel
ip route add 91.108.55.0/25 via 10.0.0.2 dev tunnel