echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
sudo ifconfig tun0 192.168.0.11 netmask 255.255.255.0
sudo ifconfig tun0 192.168.0.10 netmask 255.255.255.0
src:192.168.0.11
des:14.215.177.38
src:192.168.0.10
des:192.168.0.11
https://www.cnblogs.com/blumia/p/Make-a-simple-udp-tunnel-program.html
你这里看是通过代理上网,本质其实是通过建立隧道来中转数据,我这里举得例子是通过建立gre来通信,本质也是一样的。
如上图,假设服务器B要通过A出去访问百度,那么怎么办呢,首先是在AB之间建立一个虚拟的隧道,仿佛他们之间就连了一根网线,然后B访问百度时将数据通过网线传给A,A在根据路由从A的eth0接口出去并作源NAT,这样就实现了B通过A访问百度,那么实际该怎么做呢:
一、AB之间建立隧道
在B上输入如下三条目命令:
ip tunnel add gre0 mode gre local 2.2.2.2 remote 1.1.1.1 ttl 255
ip link set gre0 up
ip addr add 192.168.1.2/24 dev gre0
在A上输入如下三条命令:
ip tunnel add gre0 mode gre local 1.1.1.1 remote 2.2.2.2 ttl 255
ip link set gre0 up
ip addr add 192.168.1.1/24 dev gre0
这时候在AB上就都建立起了隧道,通过ip a命令可以看到A B上含有gre接口并都还有IP地址,可在两边互ping gre0的接口IP地址检测隧道是否互通,如果不通后面肯定是都不通的。
二、写路由
默认在B上默认路由肯定是从eth0出去的,这时候比如你想通过隧道去A那就得写静态路由,把你想去A得IP加路由通过gre隧道送到A上去,如果时大量数据走隧道就要通过其它方式了,这里先来个简单得我们写个静态路由:
ip route add 14.215.177.38/32 via 192.168.1.1
写完这条路由后你在B上ping 14.215.177.38就到A上去了,这个可以通过抓包来确认,你可以抓eth0或者gre0接口都行,还有一个就是你ping得时候最好带源,
ping -I 192.168.1.2 14.215.177.38
三、在A上写防火墙规则及回程路由
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
这样应该就ok了。
还有木有懂这方面的大佬啊,可以提供服务器