我正在尝试设置自己的小型接入点,并且已经让它的两个核心元素正常工作。
- WiFi 接入点已连接。我可以在路由器上访问网络服务器
- 通过 SSH 进入路由器,我可以通过 PPTP 连接到外部互联网
有人知道有什么方法可以将这两个元素连接在一起吗?
答案1
首先需要启用 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
然后假设你的 VPN 分配了一个静态 IP,你将需要 SNAT:
iptables -t nat -A POSTROUTING -o <TUNNEL INTERFACE> -j SNAT --to-source <VPN IP>
替换并视情况而定。如果您的 VPN 为您提供了动态 IP,则需要改用 MASQUERADE:
iptables -t nat -A POSTROUTING -o <TUNNEL INTERFACE> -j MASQUERADE
然后使用以下命令检查路由表是否正确:
route -n
检查是否有类似如下的一行:
0.0.0.0 <VPN ENDPOINT IP> 0.0.0.0 UG 2 0 0 <VPN INTERFACE>
如果缺失,请添加:
route add default gw <VPN ENDPOINT IP> dev <VPN INTERFACE>
每个发行版都有自己的方法来使这些变化永久/持久,所以我需要更多信息来在这方面提供帮助。
答案2
在安装了 pptpd 并努力让我的 VPN 连接在连接时转发任何流量后。我使用了下面的 iptables 规则,它运行得很好!我不需要任何 LAN 访问,所以我没有使用它们,但 VPN Client <-> World 帮了大忙。
如果有人想要的话我会在这里分享这些规则。
# Allow traffic initiated from VPN to access LAN
iptables -I FORWARD -i ppp* -o eth0 \
-s 10.0.0.0/24 -d 192.168.0.0/24 \
-m conntrack --ctstate NEW -j ACCEPT
# Allow traffic initiated from VPN to access "the world"
iptables -I FORWARD -i ppp* -o eth1 \
-s 10.0.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
# Allow traffic initiated from LAN to access "the world"
iptables -I FORWARD -i eth0 -o eth1 \
-s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
# Allow established traffic to pass back and forth
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED \
-j ACCEPT
# Notice that -I is used, so when listing it (iptables -vxnL) it
# will be reversed. This is intentional in this demonstration.
# Masquerade traffic from VPN to "the world" -- done in the nat table
iptables -t nat -I POSTROUTING -o eth1 \
-s 10.0.0.0/24 -j MASQUERADE
# Masquerade traffic from LAN to "the world"
iptables -t nat -I POSTROUTING -o eth1 \
-s 192.168.0.0/24 -j MASQUERADE
当然,我假设你已经完成了
echo 1 > /proc/sys/net/ipv4/ip_forward