我使用运行 Arch 的盒子作为我的路由器和防火墙(带有 shorewall)。最近,我尝试在系统中添加另一个网络,但失败了。将所有内容放回之前的位置并确认一切都完全相同后,我在从内部网络 (192.168.1.0/24) 到外部的路由方面遇到了一些问题。目前的情况如下:
- 我可以从防火墙 ping 通外部网络
- 我可以从我的内部网络 ping 防火墙
- 我无法从内部网络 ping 通外部网络
我有两个网络接口,enp5s0
(内部)和enp6s0
(外部)。以下是我的路由ip route ls
(注意我的外部 IP 以 .78 结尾,出于显而易见的原因,我编辑了其余部分):
default via [redacted].1 dev enp6s0 src [redacted].78 metric 203 mtu 576
[redacted].0/24 dev enp6s0 proto kernel scope link src [redacted].78
[redacted].0/24 dev enp6s0 proto kernel scope link src [redacted].78 metric 203 mtu 576
192.168.1.0/24 dev enp5s0 proto kernel scope link src 192.168.1.1 metric 202
来自内部网络上的计算机的跟踪路由显示它到达 192.168.1.1,然后超时。我怀疑我需要添加另一条路由,允许来自 192.168.1.0/24 的流量通过 enp6s0 路由到网络。我尝试过不同的路线,但没有一个有效。另外,我的 dhcpcd.conf 确实发生了变化。如果注释行未被注释,它将创建第二个默认路由,完全停止任何连接。以前,这不是问题。
interface enp5s0
static ip_address=192.168.1.1/24
#static routers=192.168.1.1
static domain_name_servers=192.168.1.1 # I have TOR DNS bound to this ip
任何帮助将非常感激。
答案1
我在 Arch 服务器上做过类似的事情。服务器具有enp4s8
“外部”网络和wlp1s0
“内部”网络。 enp4s8
具有静态定义的 IP 地址 10.0.0.3,以及到 DSL 调制解调器 10.0.0.1 的默认路由。
/usr/bin/ip link set dev wlp1s0 up
/usr/bin/ip addr add 172.16.0.1/24 dev wlp1s0
sleep 10
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j MASQUERADE
iptables -A FORWARD -o enp4s8 -i wlp1s0 -s 172.16.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
dhcpd -cf /etc/dhcpd.wlp1s0.conf wlp1s0
您可能没有打开 IPv4 转发,并且iptables
有时很难获得正确的转发。
技巧的另一部分是在/etc/dhcpd.wlp1s0.conf
.我认为你必须告诉“内部”网络上的机器它们的默认路由和带有 DHCP 的路由器:
option domain-name "fleegle";
option domain-name-servers 172.16.0.1;
option routers 172.16.0.1;
option ntp-servers 10.0.0.3;
default-lease-time 14440;
ddns-update-style none;
deny bootp;
shared-network intranet {
subnet 172.16.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
pool { range 172.16.0.50 172.16.0.200; }
}
}