我正在尝试一些设置,以允许我的设备在物理上彼此相邻,并加快我的工作流程,这样我就不需要坐在房子寒冷的地方的路由器旁边通过 ftp 发送文件,执行 ssh,无头服务器的常用功能。我最初的解决方案是使用我找到的 PCI 以太网卡,将所述卡插入机器 A,将计算机物理连接在一起,然后按照本文允许机器B通过机器A访问网络。
总结一下:
机器A是有2个以太网端口的桌面,IP地址在网络上192.168.1.9
机器 B 是一台笔记本电脑,有 1 个以太网端口,我的目标,IP 地址192.168.2.193
我按照正确设置 dnsmasq 的说明进行操作,以允许 B 通过 A 访问互联网。到目前为止,我可以 SSH 到 B 的唯一方法是通过 A 的 IP 设置隧道,转发“内部”的端口 22地址192.168.2.193
机器 B 可以访问外部网络,并且互联网行为正常
我的 ssh 命令:
ssh -L 8080:192.168.2.193:22 [email protected] -N
如果需要更多信息,我可以提供解决此问题所需的任何额外信息。
编辑
使用机器 A 的建议输入更新了 iptables
Chain INPUT (policy ACCEPT)
target prot opt source destination
val_input tcp -- anywhere anywhere
ACCEPT udp -- 192.168.2.0/24 anywhere multiport dports bootps,bootpc /* dhcp */
ACCEPT tcp -- 192.168.2.0/24 anywhere tcp dpt:domain /* dns-tcp */
ACCEPT udp -- 192.168.2.0/24 anywhere udp dpt:domain /* dns-udp */
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain val_input (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere state NEW,RELATED,ESTABLISHED
RETURN all -- anywhere anywhere state NEW,RELATED,ESTABLISHED
RETURN all -- anywhere anywhere state NEW,RELATED,ESTABLISHED
DROP all -- anywhere anywhere
Chain bal_output (0 references)
target prot opt source destination
编辑2ip a
机器A上 的输出
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:08:54:3d:e8:fd brd ff:ff:ff:ff:ff:ff
inet 192.168.2.1/24 brd 192.168.2.255 scope global enp1s5
valid_lft forever preferred_lft forever
inet 192.168.2.1/32 scope global enp1s5
valid_lft forever preferred_lft forever
inet6 fe80::208:54ff:fe3d:e8fd/64 scope link
valid_lft forever preferred_lft forever
3: enp1s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether 00:1e:90:78:9a:97 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.9/24 brd 192.168.1.255 scope global enp1s8
valid_lft forever preferred_lft forever
inet6 fe80::21e:90ff:fe78:9a97/64 scope link
valid_lft forever preferred_lft forever
编辑3ifconfig
机器B上 的输出
[jaz@Jaz-Jackson ~]$ ifconfig
........
ens5f5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.193 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::1a0f:d7d2:b678:665f prefixlen 64 scopeid 0x20<link>
ether 20:cf:30:71:b2:7e txqueuelen 1000 (Ethernet)
RX packets 379032 bytes 142855672 (136.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 510236 bytes 65400716 (62.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 32
......
答案1
您正在谈论将机器 A 变成路由器。 DNSMasq 是一个有用的组件,允许路由器向 dhcp 客户端分发 IP 地址,并提供名称服务器。然而,这本身还不够。
您需要在内核中启用数据包转发。
sysctl net.ipv4.ip_forward=1
使用 root 权限运行,例如 sudo。通过将其放在net.ipv4.ip_forward=1
下面的某个位置使其永久化/etc/sysctl.d/
,例如将其放在名为“routing.conf”的文件中。您可以通过运行来检查当前值sysctl net.ipv4.ip_forward
。您需要网络地址转换(NAT),又名伪装。如果您使用 iptables,则顶部需要一个如下所示的节(对于面向外的接口
enps1s8
):*nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o enp1s8 -j MASQUERADE COMMIT
除了在内核中启用转发并设置 NAT 之外,您还需要告诉防火墙接受数据包转发请求,因此对于 iptables 来说,有一些规则如下:
# Forward between client LAN and external WAN -A FORWARD -i enp1s5 -o enp1s8 -j ACCEPT -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -i enp1s8 -o enp1s5 -j ACCEPT
最后,需要制定如何路由数据包的规则。这不是防火墙的问题,而是我会使用 iproute2。将其放入脚本中很方便:
$ cat /usr/local/sbin/add-lan-route #! /usr/bin/ip -b addr add 192.168.2.1 dev enp1s5 route add 192.168.2.1/24 via 192.168.2.1 dev enp1s5
机器 B(笔记本电脑)也想与机器 A(台式机)上的 dnsmasq 进行通信。因此需要更多的 iptables 规则来打开所需的端口。为了让事情井井有条,为此建立一个“链”是个好主意,但如果你对 iptables 没有信心,获得你想要的东西的最直接方法是这样的:
-A INPUT -p udp -s 192.168.2.0/24 -m multiport --dports 67,68 -m comment --comment "dhcp" -j ACCEPT -A INPUT -p tcp -s 192.168.2.0/24 --dport 53 -m comment --comment "dns-tcp" -j ACCEPT -A INPUT -p udp -s 192.168.2.0/24 --dport 53 -m comment --comment "dns-udp" -j ACCEPT
最后,您希望机器 B 的 dhcp 客户端获取正确的 IP 地址,该地址可以由机器 A 上的 dnsmasq 分发。基本的 dnsmasq 配置可能如下所示:
interface=enp1s5 dhcp-range=192.168.2.2,192.168.2.254,255.255.255.0,1h dhcp-host=20:cf:30:71:b2:7e,192.168.2.193,1h cache-size=2048
缓存大小并不重要,它只是一个建议,您可以修改或放弃。其余的允许插入 enp1s5 的任何东西请求 IP 地址,如果它是机器 B 的 MAC,它将获得您首选的 IP 地址。您还应该查看默认的 dnsmasq 配置,因为它有很多注释需要考虑。
完成所有这些步骤后,您应该希望机器 A 充当路由器,它可以向机器 B 授予名称服务和 IP 地址,并通过 enp1s8 对互联网连接进行 NAT。