转发 PPTP VPN

Reading time ~1 minute

为了能够从公网连接 VPN 回来,最终还是把路由移到了寝室, 外网是通了,但电信毕竟上传带宽小,效果是在惨不忍睹,于是在校内的时候还是要选择内网连接。

然而我旦信息办脑子常年有洞,大张江的寝室运气不好,惨遭毒手,于是便出现这等诡异现象: 从实验室有线能连回寝室,但是,用学校无线怎么也 ping 不通寝室。 为了能够从无线连回寝室,于是便想用实验室一台台机做转发。

OpenVPN 转发的时候,直接一行 socat 转 UDP 就轻松搞定,然而想转 PPTP 的时候却蛋疼了。 PPTP 的 1723 端口转发下 TCP 也很容易,但是 47 端口(47 是协议号,之前看错了,如有误导,非常抱歉,感谢评论指出) 还有个 GRE 协议再使用,于是也得转, 鉴于 socat 实在玩不转,也不知道能不能实现这个转发,于是最终还是回到 iptables 转发。

iptables 一直没能搞太清楚,于是趁着这次机会,又好好学习了一遍万能的 iptables, 这次在网上找到一篇觉得讲的很清楚的文章,为了防止找不到了,转载了一份

按照这篇文章的说明,很轻松的完成了 TCP 的转发,然而 GRE 的转发还是不生效, 最后又在网上找来找去,终于发现,需要加载一个模块的样子:modprobe ip_nat_pptp。 加载完成后,再连接立刻就连上了。

于是最后得到操作脚步如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_nat_pptp

local_ip=xx.xx.xx.xx
remote_ip=yy.yy.yy.yy

iptables -P FORWARD DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# forward socks
iptables -t nat -A PREROUTING -d $local_ip -p tcp --dport 10801 -j DNAT --to $remote_ip
iptables -A FORWARD -d $remote_ip -p tcp --dport 10801 -j ACCEPT
iptables -t nat -A POSTROUTING -d $remote_ip -p tcp --dport 10801 -j SNAT --to $local_ip

# forward PPTP
iptables -t nat -A PREROUTING -d $local_ip -p tcp --dport 1723 -j DNAT --to $remote_ip
iptables -A FORWARD -d $remote_ip -p tcp --dport 1723 -j ACCEPT
iptables -t nat -A POSTROUTING -d $remote_ip -p tcp --dport 1723 -j SNAT --to $local_ip
iptables -t nat -A PREROUTING -d $local_ip -p gre -j DNAT --to $remote_ip
iptables -A FORWARD -d $remote_ip -p gre -j ACCEPT
iptables -t nat -A POSTROUTING -d $remote_ip -p gre -j SNAT --to $local_ip

挂载网络文件夹后网络故障时文件操作命令卡死

挂载 NFS 或者 Samba 的时候,经常会由于网络故障导致挂载好的链接断掉。此时如果尝试进行 ls、cd、df 等各种命令,只要与此目录沾上边,就会卡住。如果使用了类似 oh-my-zsh 这种配置的,只要在网络目录中,弹出命令提示符前就会直接卡住。这个时候第一反应就是...… Continue reading

路由折腾记 第四弹

Published on September 02, 2017